我有一个矩阵,我想考虑它有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
答案 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);
对于偶数大小的子矩阵,您必须选择哪个元素为中心,然后修改很容易。