【发布时间】:2015-04-28 13:48:19
【问题描述】:
我想在 python 中创建一个 4 维零数组。 我知道如何对方形数组执行此操作,但我希望列表具有不同的长度。
现在我用这个:
numpy.zeros((200,)*4)
这给了他们所有的长度 200 但我想有长度 200,20,100,20 因为现在我的数组中有很多我不使用的零
【问题讨论】:
我想在 python 中创建一个 4 维零数组。 我知道如何对方形数组执行此操作,但我希望列表具有不同的长度。
现在我用这个:
numpy.zeros((200,)*4)
这给了他们所有的长度 200 但我想有长度 200,20,100,20 因为现在我的数组中有很多我不使用的零
【问题讨论】:
你可以使用np.full:
>>> np.full((200,20,10,20), 0)
numpy.full
返回一个给定形状和类型的新数组,用 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 传递给 shape:
shape : 整数或整数序列 新数组的形状,例如 (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 的答案。不过,两者现在都可以使用!
【讨论】: