鑑於矩陣:以連續的矩陣塊的最大值在MATLAB
a =
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
我想獲得以下四個2×2矩陣:
a1 =
1 1
1 1
a2 =
2 2
2 2
a3 =
3 3
3 3
a4 =
4 4
4 4
從那裏,我想取每個矩陣的最大,然後重塑結果成2×2矩陣的結果,如下所示:
r =
1 2
3 4
結果最大值Va的位置相對於它們在初始矩陣中的原始位置的提示是重要的。
目前,我使用下面的代碼來實現:
w = 2
S = zeros(size(A, 1)/w);
for i = 1:size(S)
for j = 1:size(S)
Window = A(i*w-1:i*w, j*w-1:j*w);
S(i, j) = max(max(Window));
end
end
這工作,但它似乎是必須有,不涉及迭代(矢量)的方式。
我試圖用重塑像這樣:但是 reshape(max(max(reshape(A, w, w, []))), w, w, [])
,是以錯誤的價值觀和收益的最大值:
ans =
3 4
3 4
有沒有辦法做到這一點不重複或以其他方式提高自己的迭代方法?
這裏是一個一行法比你的循環要慢4倍:'SOLN = cell2mat(cellfun(@Max,cellfun(@Max,mat2cell(A,[2 2], [2 2]),'UniformOutput',false),'UniformOutput',false));'。你確實問過沒有迭代的方法:-)但是我已經把它作爲一個評論,而不是一個答案,因爲從速度的角度來看,迭代確實是更可取的。 –
您是否需要中間2x2矩陣作爲別的東西,或者您只是對最後一個矩陣「r」感興趣? –
是的,那也是我的想法...... – bla