python - 使用 bool 索引就地修改 numpy 数组部分

标签 python numpy

给定一个二维 numpy 数组,即;

import numpy as np

data = np.array([
     [11,12,13],
     [21,22,23],
     [31,32,33],
     [41,42,43],         
     ])

我需要根据所需行和列的两个掩码向量就地修改子数组;

rows = np.array([False, False, True, True], dtype=bool)
cols = np.array([True, True, False], dtype=bool)

这样即;

print data

 #[[11,12,13],
 # [21,22,23],
 # [0,0,33],
 # [0,0,43]]      

最佳答案

Now你知道如何访问你想要的行/列,只需将你想要的值分配给你的子数组。不过,这有点棘手:

mask = rows[:,None]*cols[None,:]
data[mask] = 0

原因是当我们以 data[rows][:,cols] 访问子数组时(如您的 previous question 所示,我们正在查看一个 View ,而一些对原始数据的引用会在途中丢失。

相反,我们在这里通过广播两个一维数组 rowscols 来构造一个二维 bool 数组。您的 mask 数组现在具有形状 (len(rows),len(cols)。我们可以使用 mask 直接访问原始项目data,我们将它们设置为一个新值。请注意,当您执行 data[mask] 时,您会得到一个一维数组,这不是您想要的答案previous question .

要构造掩码,我们可以使用 & 运算符而不是 *(因为我们正在处理 bool 数组),或者更简单的 np.outer功能:

mask = np.outer(rows,cols)

编辑:@Marcus Jones 的 np.outer 解决方案。

关于python - 使用 bool 索引就地修改 numpy 数组部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437264/

相关文章:

python - os.getenv 返回 None 而不是正确的值

python - 如何使用 on_delete 属性在用户模型的外键字段中设置用户全名?

python - 从 np.array 中删除最后 N 个值的更有效方法

python - Numpy 以不同于 python 的方式循环

python - 按列中的唯一值拆分 numpy 数组

python - matlab 到 python 代码转换

python - 排列的秩

python - 替换数据框中特定列中的唯一值

python - 安装没有 Chameleon 的 Pyramid

python - 如何过滤一个 Numpy 数组,使每个 X 值只有一个 Y 值