4

インデックス値を使用して計算を行い、計算された値をそのインデックスに割り当てるために反復処理している 2D 配列があります。

NumPy のドキュメントでは、イテレータを使用して値を変更する例が提供されています。

for x in np.nditer(a, op_flags=['readwrite']):
    x[...] = 2 * x

ただし、次の方法を使用してインデックスを追跡する場合、これは機能しないようです。

it = np.nditer(a, flags=['multi_index'])
while not it.finished:
    it[...] = . . .
    it.iternext()

ただし、it.multi_index値を使用することはできますが、不必要に冗長に思えます。別のアプローチまたは別の構文を使用して、これを達成するためのより簡単な方法はありますか?

it = np.nditer(a, flags=['multi_index'])
while not it.finished:
    matrix[it.multi_index[0]][it.multi_index[1]] = . . .
    it.iternext()

編集

multi_index以下は、反復子のインデックス付けを使用して値を変更しようとして失敗した反復の例です。

matrix = np.zeros((5,5))
it = np.nditer(matrix, flags=['multi_index'])
while not it.finished:
  it[...] = 1
  it.iternext()

生成されるエラーは

TypeError                                 Traceback (most recent call last)
<ipython-input-79-3f4cabcbfde6> in <module>()
     25 it = np.nditer(matrix, flags=['multi_index'])
     26 while not it.finished:
---> 27   it[...] = 1
     28   it.iternext()

TypeError: invalid index type for iterator indexing
4

1 に答える 1