python - numpy.nditer 的正确用法?

标签 python numpy

我正在尝试用 numpy.nditer 进行数组运算, 但没有得到预期的结果。

我的代码是

import numpy as np
arr1 = - np.random.random((2,2))
arr2 = np.random.random((2,2))
arr = np.zeros((2,2))
it = np.nditer([arr1, arr2, arr], [], [['readonly'], ['readonly'], ['writeonly']])
for a1, a2, a in it:
    a = a1 if -a1 < a2 else a2
print arr
print it.operands[2]

我在 arrit.operands[2] 中得到的结果全为零,但我希望 arr1arr2。在迭代中为 arr 赋值的正确方法是什么?

最佳答案

在 Python 中执行 a = 将简单地重新绑定(bind)局部变量 a;它不会影响 a 包含的内容。

使用nditer,迭代变量a1a2a 实际上是0 维数组。因此,要更改 a,请使用(有点奇怪的)a[()] = 语法:

for a1, a2, a in it:
    a[()] = a1 if -a1 < a2 else a2

不过请注意,使用 np.where 可以大大简化您的整个代码:

import numpy as np
arr1 = - np.random.random((2,2))
arr2 = np.random.random((2,2))
arr = np.where(-arr1 < arr2, arr1, arr2)

关于python - numpy.nditer 的正确用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12960744/

相关文章:

python - 对角线主教用 python 在棋盘上移动

python - keras:使用get_weights函数提取权重

python - 在 numpy 数组中查找连续重复的 nan

python - 如何优化 Python 中的嵌套 for 循环

python - Pandas groupby mean() 不忽略 NaN

Python:展平 XML 文档(删除换行符)

python - 使用 cv2 时如何 'mirror' 实时网络摄像头视频?

python - 如何使用python将数组存储在字典中

python - 将 PIL 图像转换为 skimage?

python - 按 Fortran 连续顺序 reshape numpy.array