【问题标题】:Setting values in a numpy arrays indexed by a slice and two boolean arrays在由切片和两个布尔数组索引的 numpy 数组中设置值
【发布时间】:2023-03-31 08:08:01
【问题描述】:

我有两个 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,)

我想我在试图做一些相对简单的事情时让自己陷入了一个可怕的混乱之中。如何使用这两个布尔数组进行索引,以便设置数组的值?

【问题讨论】:

    标签: python arrays numpy boolean


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2020-03-25
      • 2015-05-19
      • 2021-01-06
      • 1970-01-01
      • 2021-02-07
      • 2017-06-24
      • 2017-08-06
      • 1970-01-01
      相关资源
      最近更新 更多