2015-01-21 82 views
4

以下腳本給出了矩陣每個元素邊界的總和。計算關於彼此相鄰的值爲1的元素的邊界。這個總和的產品被稱爲聯繫周長。用於計算矩陣元素之間邊界的腳本

但是有沒有其他方法可以總結或向量化我的原始簡單腳本? 我問這個要求是因爲我的實矩陣非常大,使用「for」增加了計算時間。

謝謝。

a1=[1 1 0 1 0 1; 
    0 1 1 0 0 1; 
    1 1 0 1 0 1; 
    1 1 0 0 1 0; 
    0 0 0 1 1 1] 
m=5 
n=6 
cmp=zeros(m,n) 
cmp1=zeros(m,n) 
for i=1:m-1 
    for j=1:n 
     if a1(i,j)==a1(i+1,j) && a1(i,j)==1 
      cmp(i,j)=1 
     end 
    end 
    for i=1:m 
     for j=1:n-1 
      if a1(i,j)==a1(i,j+1) && a1(i,j)==1 
       cmp1(i,j)=1 
      end 
     end 
    end 
end 
cmtotal=cmp+cmp1 
pc=sum(sum(cmtotal)) 

回答

3

這應該是非常有效的一個 -

%// Case1 and case 2 matches 
case1_matches = a1(1:end-1,:) == a1(2:end,:) & a1(1:end-1,:)==1 
case2_matches = a1(:,1:end-1) == a1(:,2:end) & a1(:,1:end-1)==1 

%// Get sum of those matches for the final output, equivalent to your pc 
out = sum(case1_matches(:)) + sum(case2_matches(:)) 

您可以sum(..(:))nnz()取代,但我懷疑,這將是比任何sum更好的運行時性能方面按照benchmarks of sum against nnz

+0

謝謝。它的工作原理。 – user3760558 2015-01-21 10:05:27