python - 可以在 python 中向量化这个数组操作吗?

标签 python numpy vectorization

作为 Python 初学者,我很难理解矢量化“for”循环。 我有一个 2D numpy 数组,仅包含两个值 -1 和 1。对于每一列和行,我想执行以下操作:将第一次遇到 1 之前遇到的所有 -1 值设置为 0。 这可以矢量化吗?即使没有崩溃,如果行/列中没有 1,因此整个行/列将被设置为 0?

最佳答案

这是一种矢量化方法 -

mask = a==1
a[~np.maximum.accumulate(mask,axis=0)] = 0
a[~np.maximum.accumulate(mask,axis=1)] = 0

示例运行 -

In [39]: a
Out[39]: 
array([[ 1, -1,  1, -1, -1],
       [ 1,  1, -1,  1, -1],
       [-1,  1, -1,  1, -1],
       [ 1, -1, -1, -1, -1]])

In [40]: mask = a==1

In [41]: a[~np.maximum.accumulate(mask,axis=0)] = 0

In [42]: a[~np.maximum.accumulate(mask,axis=1)] = 0

In [43]: a
Out[43]: 
array([[ 1,  0,  1,  0,  0],
       [ 1,  1, -1,  1,  0],
       [ 0,  1, -1,  1,  0],
       [ 1, -1, -1, -1,  0]])

关于python - 可以在 python 中向量化这个数组操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42411293/

相关文章:

python - 使用Numpy计算基尼系数

python - Numpy:检查一维数组是否是另一个数组的子数组

python - 如何添加新列,从另一列中选择 x-lowest 值,并使用 1 和 0 进行区分? (以身份证号码为准)

python - 两个大型数据集的最快迭代合并

matlab - 向量化填充动态编程表的嵌套 for 循环

python - 根据两个表的一列中共有的值对两个表进行求和

python - 为 celery 任务编写测试时出错

python - 合并相同的数据框,以便将每一行与其他每一行进行比较

python - 无法在 Ubuntu 上安装 PyArrow

performance - 在 MATLAB 中乘以标量的外积之和