python - 用于屏蔽每列单个切片的矢量化方法

标签 python numpy

我有一个 numpy 数组:

>>> a = np.arange(20).reshape(5, -1)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])

我有一个按列顺序排列的区域数组,我想为它们创建一个 bool 掩码:

idx = np.array([[0,2], [1,3], [2,4], [1,4]])

我想要的这组索引掩码是:

array([[ True, False, False, False],
       [ True,  True, False,  True],
       [False,  True,  True,  True],
       [False, False,  True,  True],
       [False, False, False, False]])

因此 0 列有 0:2 屏蔽,1 列有 1:3 屏蔽,等等。我目前的方法有效,但我正在寻找矢量化的东西:

def foo(a, idx):
    out = np.zeros(a, dtype=np.bool8)
    for (i, j), k in zip(idx, np.arange(a[1])):
        out[i:j, k] = True
    return out

在行动中:

foo(a.shape, idx)

array([[ True, False, False, False],
       [ True,  True, False,  True],
       [False,  True,  True,  True],
       [False, False,  True,  True],
       [False, False, False, False]])

最佳答案

使用 broadcasting -

In [434]: r = np.arange(a.shape[0])[:,None]

In [435]: (idx[:,0] <= r) & (idx[:,1] > r)
Out[435]: 
array([[ True, False, False, False],
       [ True,  True, False,  True],
       [False,  True,  True,  True],
       [False, False,  True,  True],
       [False, False, False, False]])

关于python - 用于屏蔽每列单个切片的矢量化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793486/

相关文章:

python - key 错误 : "Unknown task summarization, available tasks are [' feature-extraction', 'sentiment-analysis' 、 'ner' 、 'question-answering' 、 'fill-mask' ]"

python - 仅镜像屏幕旋转 - Python

python - 有没有一种简单的方法来检查查询集中的所有属性是否具有相同的值?

python - 从每行中选择 N 个元素,不循环

python - 在 python 中添加追加更新和扩展

javascript - 如何在模板中将数据从 Flask 传递到 JavaScript?

python - 将 1d 数组添加到 3d 数组的每个 2d 数组上

python - 如何获得预测值和测试数据,并将实际值与预测值可视化?

python - Pandas:无法安全地将传递的用户数据类型 int32 转换为 float64

python - 图像打开 python 速度慢,建议提高速度?