正确使用numpy.nditer?

sil*_*ado 4 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]
Run Code Online (Sandbox Code Playgroud)

我得到的所有结果为零均arrit.operands[2],但我希望无论从价值arr1还是arr2.arr在迭代中为值赋值的正确方法是什么?

nne*_*neo 5

a =用Python 做一下就会重新绑定局部变量a; 它不会影响a包含的内容.

nditer,迭代变量a1,a2并且a实际上是0-d阵列.因此,要进行更改a,请使用(略微奇怪的)a[()] =语法:

for a1, a2, a in it:
    a[()] = a1 if -a1 < a2 else a2
Run Code Online (Sandbox Code Playgroud)

但请注意,使用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)
Run Code Online (Sandbox Code Playgroud)