4-мерный массив нулей в python

Я хочу сделать 4-мерный массив нулей в python. Я знаю, как это сделать для квадратного массива, но я хочу, чтобы списки имели разную длину.

прямо сейчас я использую это:

numpy.zeros((200,)*4)

что дает им всю длину 200, но я хотел бы иметь длины 200,20,100,20 потому что теперь у меня много нулей в моем массиве, которые я не использую

3 ответов


можно использовать np.full:

>>> np.full((200,20,10,20), 0)

и NumPy.полный

возвращает новый массив заданной формы и типа, заполненный fill_value.

пример :

>>> np.full((1,3,2,4), 0)
array([[[[ 0.,  0.,  0.,  0.],
         [ 0.,  0.,  0.,  0.]],

        [[ 0.,  0.,  0.,  0.],
         [ 0.,  0.,  0.,  0.]],

        [[ 0.,  0.,  0.,  0.],
         [ 0.,  0.,  0.,  0.]]]])

Вы можете передать более одного arg в форму:

форма : int или последовательность ints Форма нового массива, например, (2, 3) или 2.

In [26]: arr = np.zeros((200, 20, 10, 20))

In [27]: arr.shape
Out[27]: (200, 20, 10, 20)

это также кажется намного более эффективным, когда у вас большие размеры:

In [43]: timeit arr = np.full((200, 100, 100, 100),0)
1 loops, best of 3: 232 ms per loop

In [44]: timeit arr = np.zeros((200, 100, 100, 100))
100000 loops, best of 3: 12.6 µs per loop
In [45]: timeit arr = np.zeros((500, 100, 100, 100))
100000 loops, best of 3: 13.5 µs per loop    
In [46]: timeit arr = np.full((500, 100, 100, 100),0)
1 loops, best of 3: 1.19 s per loop

начиная с Python V. 3.50, используя np.full команда возвращает

FutureWarning: in the future, full((1, 3, 2, 4), 0) will return an array of dtype('int32').

основываясь на этом, я бы подключил ответ @Padriac. Но пока оба работают!