正在試驗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)
而轉讓後,異或的通道掩碼== 0或1或2的代碼工作正常,但如果通道== [1,2]或smt這樣,分配不會發生
目前尚不清楚*爲什麼*您需要使用'flat'。正如下面已經回答的那樣,'flat'可能會創建一個副本,因此您的更新可能不會更改原始數組。解釋爲什麼你需要「平坦」,也許你可以得到一個解決方案。 – lbolla
@lbolla更新了問題 – KgOfHedgehogs
@ЮраМахоткин似乎你被困在['XY問題'](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – Divakar