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]

arrとの両方ですべてゼロの結果が得られますが、またはのいずれかit.operands[2]からの値を期待していました。反復で値を割り当てる正しい方法は何でしょうか?arr1arr2arr

4

1 に答える 1

5

Pythonで行うa =と、ローカル変数が再バインドされるだけですa。内容には影響しませんa

を使用nditerすると、反復変数a1a2および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)
于 2012-10-18T18:14:11.973 に答える