如何在矩阵中找到子矩阵的中间元素

时间:2014-04-11 12:53:33

标签: matlab matrix indexing

我有一个矩阵,我想考虑它有4 sub matrices放在一起。如何在每个子矩阵在一起时找到它们的中间元素?

考虑下面的矩阵。它由4个子矩阵构建。

1  2  3  4   5  6   
7  8  9  10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36

我想得到他们的中间元素,所以我可以:

 8, 11, 26, 29

3 个答案:

答案 0 :(得分:0)

知道matlab中的矩阵索引是逐列的,例如

总是有帮助的
indOrd = [1,4,7;2,5,8;3,6,9]

其中数字是索引顺序,与您的示例无关。 indOrd(4)将返回4.尝试使用它来查找索引位置。

答案 1 :(得分:0)

根据我的理解,这可能对您有用,这是一个演示,所以请使用您自己的参数 -

<强>代码

%%// Input matrix 
A = rand(44,44);

%%/ Number of submatrices needed
num_submat = 16;%%// 4 for your example case

%%/ Number of submatrices along row and column
num_submat1= sqrt(num_submat);

%%// Middle element indices along each direction
v1 = floor(size(A,2)/(2*num_submat1))+1:size(A,2)/(num_submat1):size(A,2);

%%// Middle elements
middle_ele = A(v1,v1)

答案 2 :(得分:0)

假设每个子矩阵具有奇数大小2n+1,则仅一个子矩阵的中心坐标为[n+1, n+1]。如果你有一个带M * M子矩阵的正方形(在你的情况下M = 2),则坐标为[n+1+i*(2*n+1), n+1+j*(2*n+1)],i和j在0:M-1范围内独立。

回到Matlab,现在很容易生成分组在矩阵A中的子矩阵中心的所有索引:

n = floor(size(A,1)/(2*M));
xc = n+1+reshape(repmat(0:M-1,M,1),[],1);
yc = n+1+reshape(repmat((0:M-1)',1,M),[],1);
centers = A(yc, xc);

对于偶数大小的子矩阵,您必须选择哪个元素为中心,然后修改很容易。