2017-02-23 30 views
1

Python中的初學者在這裏,我很難將矢量化'for'循環。 我有一個二維numpy數組,只包含兩個值-1和1.對於每一列和行,我想要做以下操作:設置在第一次遇到1之前遇到的所有-1值爲0 可以被矢量化?即使沒有崩潰,如果行/列中沒有1,因此整個行/列將被設置爲0?可能在python中矢量化這個數組操作?

+0

你能給一些示例輸入和輸出? – Eric

回答

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

非常好的解決方案,非常感謝! – Adrien