我有一个矩阵,我想要考虑它有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
我有一个矩阵,我想要考虑它有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
从我所了解,这可能为你工作,这是一个演示,所以用自己的参数 -
代码
%%// 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)
它总是让你知道,矩阵索引在MATLAB去纵列例如,
indOrd = [1,4,7;2,5,8;3,6,9]
其中数字是索引顺序,与您的示例无关。 indOrd(4)
将返回4.尝试使用它来查找索引位置。
假设每个子矩阵为奇数大小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);
对于偶数大小的小矩阵,你要选择哪一个元素是中心,那么修改相当容易。