配列が与えられると、
>>> n = 2
>>> a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]]]*n)
>>> a
array([[[1, 1, 1],
[1, 2, 3],
[1, 3, 4]],
[[1, 1, 1],
[1, 2, 3],
[1, 3, 4]]])
その中の値をそのように簡潔に置き換えることが可能であることを私は知っています、
>>> a[a==2] = 0
>>> a
array([[[1, 1, 1],
[1, 0, 3],
[1, 3, 4]],
[[1, 1, 1],
[1, 0, 3],
[1, 3, 4]]])
配列の行全体(最後の軸)に対して同じことを行うことは可能ですか?これでうまくいき、一致するサブアレイのすべての要素が11に置き換えられることはわかっていa[a==[1,2,3]] = 11
ますが、別のサブアレイに置き換えたいと思います。私の直感では、次のように書くように言われていますが、エラーが発生します。
>>> a[a==[1,2,3]] = [11,22,33]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: array is not broadcastable to correct shape
要約すると、私が取得したいのは次のとおりです。
array([[[1, 1, 1],
[11, 22, 33],
[1, 3, 4]],
[[1, 1, 1],
[11, 22, 33],
[1, 3, 4]]])
...そしてもちろんnは一般に2よりもはるかに大きく、他の軸も3よりも大きいので、必要がなければループしたくありません。
更新:([1,2,3]
または私が探している他のもの)は常にインデックス1にあるとは限りません。例:
a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]], [[1,2,3],[1,1,1],[1,3,4]]])