2017-10-05 64 views
0

我有一個100×100矩陣,我想通過在更大的矩陣中進行子矩陣的標量求和來創建一個10×10矩陣。因此,一個子10×10矩陣的標量和將是一個單一的數字,它將是新的10×10矩陣的一個元素。從Matlab中提取子矩陣的均值,並用平均值創建新矩陣

我用下面的代碼:

x = ones(100,100) % 100 X 100 matrix 
y = [] % Output 
a = 0 ; 
b = 0; 
while a <=100 
    while b <=100 
     y = [y,sum(sum(x((a+1):(a+10),(b+1):(b+10))))]; 
     a=a+10; 
     b=b+10; 
    end 
end 
reshape(y,10,10) 

我得到一個1×10矩陣,而不是100×100矩陣和環路熄滅索引。我如何糾正錯誤?

+0

如果你告訴我們你的代碼發生了什麼事情錯了,它會有所幫助... – beaker

+0

我得到一個1×10矩陣,而不是100×100矩陣和循環熄滅指數 – Learner27

+0

的我想你意思是代替10×10矩陣。解決即時問題的簡單方法是將while條件改爲'while <100'和'while b <100',但是這樣你的結果矩陣將會被移位。我很好奇,你爲什麼選擇使用while循環而不是for循環? – beaker

回答

1

如果我正確理解了你,這應該做你想做的。請注意,它會計算總和,而不是平均值。如果你想要的是平均值,只需將總和改爲平均值即可。

x = ones(100,100) % 100 X 100 matrix 
y = NaN(10,10) % Output 
a = 0 ; 
b = 0; 
for xi=5:10:100 
    for yi=5:10:100 
     sub_matrix = x(xi-4:xi+5,yi-4:yi+5); 
     y(ceil(xi/10),ceil(yi/10))=sum(sum(sub_matrix)); 
    end 
end