作为 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/