簡體   English   中英

在由切片和兩個布爾數組索引的numpy數組中設置值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM