Python 设置由一个切片和两个布尔数组索引的numpy数组中的值

Python 设置由一个切片和两个布尔数组索引的numpy数组中的值,python,arrays,numpy,boolean,Python,Arrays,Numpy,Boolean,我有两个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

我有两个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!
我想也许我需要把两个索引数组放在一起,但它们的形状不同:
索引的形状是
(5,5)
,而
高索引的形状是
(12,5)


我想我在做一些相对简单的事情时把自己弄得一团糟。如何使用这两个布尔数组进行索引,以便设置数组的值?

切片一个numpy数组会返回一个视图,但布尔索引会返回一个数组的副本。因此,当您第一次在
a[slice.][index][high.[u index]
中使用布尔索引对其进行索引时,您得到了一个副本,值42被分配给一个副本,而不是数组
a
。您可以通过链接布尔索引来解决此问题:

a[slice_][(a[slice_] > 700) & (b[slice_] > 0.5)] = 42