Python 如何设置零3d numpy阵列?

Python 如何设置零3d numpy阵列?,python,numpy,Python,Numpy,我有一个3d numpy数组,a。不同元素的维度彼此不相等,即形状(a[0])=(1,2),形状(a[1])=(3,4),等等。我想以最有效的方式将a的所有元素的值设置为零。我该怎么做 谢谢 编辑:对不起,我不知道您是根据不同大小的列表创建的。除非使用np.array([[1,2,3],[4,5,6],[7,8,9]])将A的每个元素转换为np.array,否则我的代码不应该工作 您可以尝试阵列切片或使用NumPy自己的iter函数进行ndarray,称为np.nditer: In [7]: %

我有一个3d numpy数组,a。不同元素的维度彼此不相等,即形状(a[0])=(1,2),形状(a[1])=(3,4),等等。我想以最有效的方式将a的所有元素的值设置为零。我该怎么做


谢谢

编辑:对不起,我不知道您是根据不同大小的列表创建的。除非使用
np.array([[1,2,3],[4,5,6],[7,8,9]])将A的每个元素转换为
np.array
,否则我的代码不应该工作

您可以尝试阵列切片或使用NumPy自己的
iter
函数进行
ndarray
,称为
np.nditer

In [7]: %%time
   ...: for arr in A:
   ...:     arr[:] = 0
   ...:
CPU times: user 43 µs, sys: 13 µs, total: 56 µs
Wall time: 52.9 µs

In [8]: %%time
   ...: for arr in A:
   ...:     for x in np.nditer(arr, op_flags=('readwrite',)):
   ...:         x[...] = 0
   ...:
CPU times: user 42 µs, sys: 5 µs, total: 47 µs
Wall time: 47 µs
可以阅读文档

另外,由于A是一个
ndarray
,它不包含数字,而是包含对其他
ndarray
的引用(检查
A
dtype
。它应该是
对象
),因此不应该在A本身上调用
np.nditer
,而应该在
A
内部的引用数组上调用。否则,
A
的结构将被破坏:

In [9]: %%time
   ...: for arr in np.nditer(A, flags=('refs_ok',), op_flags=('readwrite',)):
   ...:     for x in np.nditer(arr, flags=('refs_ok',), op_flags=('readwrite',)):
   ...:         x[...] = 12
   ...:
CPU times: user 31 µs, sys: 2 µs, total: 33 µs
Wall time: 34.1 µs

In [10]: A
Out[10]: array([12, 12], dtype=object)

您拥有的是一个
np.array
,它包含对象——在您的特定情况下,这些对象是包含更多列表的列表。对于我能想到的任何东西来说,这都不是一个非常好的数据结构,除非您真的需要向内部列表添加大量元素。我是否可以建议对
np.array
稍作修改,使其包含更多的
np.array
s

A = np.array(map(np.array, [ [[1,2],[3,4]], [[1,2,3],[4,5,6],[7,8,9]] ] ))
现在如果我们打印它,它看起来像这样:

>>> A
array([[[1 2]
 [3 4]], [[1 2 3]
 [4 5 6]
 [7 8 9]]], dtype=object)
将值设置为0变得特别容易:

for sub_array in A:
    sub_array[...] = 0
对于校样(再次打印
A
):


我有点困惑。。。通常,numpy阵列只有一个形状,而不是多个形状。你有2d numpy数组的列表或元组吗?我这样定义它:a=np.array([[[1,2],[3,4],[[1,2,3],[4,5,6],[7,8,9]]),所以你有一个对象数组——这与3d数组不同。(请注意,
dtype=object
)。出于好奇,你在用这些物体做什么?一般来说,这种数据结构没有太多优势。好吧,它应该包含人工神经网络的权重值……我对numpy很陌生,所以如果你有更好的选择,我很高兴听到。
>>> A
array([[[0 0]
 [0 0]], [[0 0 0]
 [0 0 0]
 [0 0 0]]], dtype=object)