如何在使用mat2cell后声明子矩阵?

时间:2014-03-15 06:12:59

标签: arrays matlab matrix

我有6x6矩阵(ud),我使用以下内容将其分成3x3个小块:

%Splitting of array 
B = mat2cell(ud, udBlockVectorR, udBlockVectorC);

接下来,我想找到B中每个子矩阵的中位数。

我尝试过使用它,

for i = 1: 1: udNumBlockC
for j = 1: 1: udNumBlockC
%Find the median of each block
udMV = median( B{i, j}, :);   
end
end

然而,它并没有给我我想要的答案。

如何声明子矩阵,以便我可以将它们用于上述目的?

1 个答案:

答案 0 :(得分:1)

按如下方式拆分6x6矩阵ud

>> B = mat2cell(ud, [3 3],[3 3])
B = 
    [3x3 double]    [3x3 double]
    [3x3 double]    [3x3 double]

接下来,要从2D数组的中位数获取单个值,您需要重新整形输入(即3x3 - > 9x1),否则您将获得每列的值。水平连接每个子矩阵,以便您可以一次重塑它们(即3x12 - > 9x4)。对于ud = magic(6)

>> meds = median(reshape([B{:}],3*3,[]))
meds =
     7    29    23    14

在上面的命令中,[B{:}]是3x12。 reshape命令将每个3x3矩阵中的所有值作为4列之一。然后median计算每列(子矩阵)的中位数。

子矩阵的顺序是(row,col):( 1,1),(2,1),(1,2),(2,2)。