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. Но пока оба работают!