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

时间:2017-02-23 09:08:51

标签: python numpy vectorization

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

1 个答案:

答案 0 :(得分:3)

这是一种矢量化方法 -

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]])