numpyを試してみたところ、この奇妙な動作が見つかりました。 このコードはうまく動作:Python numpy配列整数のインデックス付きフラットスライスの割り当て
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:, 1].flat[:] = np.array([-1, -1])
>>> a
array([[ 1, -1, 3],
[ 4, -1, 6]])
しかし、このコードは、0の-1の要素と2列に変更されませんなぜですか?
>>> a[:, [0, 2]].flat[:] = np.array([-1, -1])
>>> a
array([[ 1, -1, 3],
[ 4, -1, 6]])
そして、このように0と2列の-1要素に変更されるようにコードを書く方法は?
UPD:flat
またはSMTに類似の使用は、私の例では、必ずしも
UPD2です:私はこのコードに基づか問題の例を作った:
img = imread(img_name)
xor_mask = np.zeros_like(img, dtype=np.bool)
# msg_bits looks like array([ True, False, False, ..., False, False, True], dtype=bool)
xor_mask[:, :, channel].flat[:len(msg_bits)] = np.ones_like(msg_bits, dtype=np.bool)
と割り当てた後、チャンネルでマスクをXORする== 0または1または2のコードは正常に機能しますが、channel == [1,2]またはsmtのような場合は代入が行われません
「フラット」を使用する必要があるのはなぜか分かりません。既に下記で解説したように、 'flat'はコピーを作成して、更新が元の配列を変更しない可能性があります。なぜあなたは 'フラット'を必要としているのかを解説し、おそらく解決策を得ることができます。 – lbolla
@lbolla更新された質問 – KgOfHedgehogs
@ЮраМахоткинあなたは['XY問題'](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)にこだわっているようです。 – Divakar