2017-06-19 42 views
1

我正在尋找一種快速,計算效率高的方式來計算矩陣中未中斷的「1」系列的長度矩陣中心的「1」(例如下面示例中的第5列)。在下面的示例代碼中 - 所需的答案是3,4,5,6。我的實際矩陣有更多的行和列,因此我特別尋找一種以計算有效的方式來實現這一點的方法。任何建議非常感謝。Numpy - 計算矩陣中心不間斷行的長度

from numpy import * 
a = array([0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0]) 
a=a.reshape(4,9) 
+0

我們可以假設矩陣總是有奇數列? – FJSevilla

+0

是的 - 我們可以假設這一點 – user1885116

回答

0

忽略邊界情況下,當一個或兩個半可能是充滿1s0s,這裏是一個使用slicing選擇兩個部分的一種方法,然後argmin()檢測那些變化10 -

# Get middle col ID 
n = (a.shape[1]+1)//2 

# Get non-interrupted length from middle col to left and right and add up 
lens = a[:,n:].argmin(1)+a[:,n-1::-1].argmin(1) 

包括邊界情況可能會涉及使用一堆if-else來檢查argmin的那些索引是否確實是0的。

採樣運行 -

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

In [61]: n = (a.shape[1]+1)//2 

In [62]: a[:,n:].argmin(1)+a[:,n-1::-1].argmin(1) 
Out[62]: array([3, 4, 5, 6])