4

我正在尝试使用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]但我期望来自arr1或的值arr2arr在迭代中分配值的正确方法是什么?

4

1 回答 1

5

在 Python 中做a =只会重新绑定局部变量a;它不会影响a包含的内容。

随着nditer,迭代变量a1a2a实际上是 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)
于 2012-10-18T18:14:11.973 回答