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