rob*_*ntw 3 python arrays boolean numpy
我有两个 numpy 数组:
a = np.arange(100*100).reshape(100,100)
b = np.random.rand(100, 100)
Run Code Online (Sandbox Code Playgroud)
我还有一个切片元组来提取数组的某个部分:
slice_ = (slice(5, 10), slice(5, 10))
Run Code Online (Sandbox Code Playgroud)
然后我有一组布尔索引来选择这个切片的某个部分:
indices = b[slice_] > 0.5
Run Code Online (Sandbox Code Playgroud)
如果我想将这些索引设置为不同的值,我可以轻松完成:
a[slice_][indices] = 42
Run Code Online (Sandbox Code Playgroud)
但是,如果我创建另一组布尔索引来选择索引数组的特定部分:
high_indices = a[slice_][indices] > 700
Run Code Online (Sandbox Code Playgroud)
然后尝试在这些索引处设置数组的值:
a[slice_][indices][high_indices] = 42 # Doesn't do anything!
Run Code Online (Sandbox Code Playgroud)
我想也许我需要将两个索引数组 AND 在一起,但它们的形状不同:indices形状为(5, 5),high_indices形状为(12,)。
我想我在尝试做一些相对简单的事情时陷入了可怕的混乱。如何使用这两个布尔数组进行索引,以便我可以设置数组的值?
切片一个 numpy 数组返回一个视图,但布尔索引返回一个数组的副本。所以当你第一次用布尔索引 in 索引它时a[slice_][indices][high_indices],你得到了一个副本,并且值 42 被分配给了一个副本而不是数组a。您可以通过链接布尔索引来解决问题:
a[slice_][(a[slice_] > 700) & (b[slice_] > 0.5)] = 42
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |