我正在尝试使用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]
我在arr
和it.operands[2]
都获得了所有零结果,但我期望来自arr1
或arr2
的值。在迭代中为arr
赋值的正确方法是什么?
答案 0 :(得分:5)
在Python中执行a =
只会重新绑定局部变量a
;它不会影响a
包含的内容。
使用nditer
,迭代变量a1
,a2
和a
实际上是0-d数组。因此,要更改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)