[英]Setting values in a numpy arrays indexed by a slice and two boolean arrays
我有兩個numpy數組:
a = np.arange(100*100).reshape(100,100)
b = np.random.rand(100, 100)
我也有一個切片元組來提取數組的某個部分:
slice_ = (slice(5, 10), slice(5, 10))
然后,我有一組布爾索引來選擇此片的某個部分:
indices = b[slice_] > 0.5
如果我想將這些索引設置為其他值,則可以輕松實現:
a[slice_][indices] = 42
但是,如果我創建另一組布爾索引來選擇索引數組的特定部分:
high_indices = a[slice_][indices] > 700
然后嘗試在這些索引處設置數組的值:
a[slice_][indices][high_indices] = 42 # Doesn't do anything!
我以為可能需要將兩個索引數組在一起,但它們的形狀不同: indices
的形狀為(5, 5)
, high_indices
的形狀為(12,)
。
我想自己陷入了一個混亂的困境,試圖做一些相對簡單的事情。 如何以可以設置數組值的方式使用這兩個布爾數組建立索引?
切片numpy數組會返回一個視圖,但是布爾索引會返回數組的副本。 因此,當您第一次使用a[slice_][indices][high_indices]
中a[slice_][indices][high_indices]
布爾索引對它進行索引時,您將獲得一個副本,並且將值42分配給副本而不是數組a
。 您可以通過鏈接布爾索引來解決問題:
a[slice_][(a[slice_] > 700) & (b[slice_] > 0.5)] = 42
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.