python - 在由切片和两个 boolean 数组索引的 numpy 数组中设置值

标签 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))

然后我有一组 boolean 索引来选择这个切片的某个部分:

indices = b[slice_] > 0.5

如果我想将这些索引设置为不同的值,我可以很容易地做到:

a[slice_][indices] = 42

但是,如果我创建另一组 boolean 索引来选择索引数组的特定部分:

high_indices = a[slice_][indices] > 700

然后尝试在这些索引处设置数组的值:

a[slice_][indices][high_indices] = 42 # Doesn't do anything!

我想也许我需要将两个索引数组放在一起,但它们的形状不同:indices 的形状为 (5, 5) high_indices 的形状为 (12,)

我想我在尝试做一些相对简单的事情时陷入了可怕的困惑。如何使用这两个 boolean 数组进行索引,以便我可以设置数组的值?

最佳答案

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

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

关于python - 在由切片和两个 boolean 数组索引的 numpy 数组中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634455/

相关文章:

python - 如何在Python中构建复数类?

python - IDL 的 INT_TABULATE - SciPy 等价物?

python - 使用 bool 矩阵替换 for 循环以执行高级索引

python - """TypeError: only length-1 arrays can be converted to Python scalars"""尝试在具有 7 段显示的 Pi3 上运行计数器时

javascript - JS : Iterate over an array of objects to update object

java - 最大堆找到第 k 个最小元素

python numpy.savetxt header 有额外的字符#

python - 如何在 Python 中执行反向 DNS 查找?

python - 在 Pycharm IPython 控制台中绘图

python - 从自己的类调用 iPyWidgets 不显示