matlab中两个不同矩阵的相应指数

时间:2014-04-11 20:27:28

标签: matlab matrix indexing

在算法中,在每个级别中,我有两个相应的矩阵,其中一个矩阵的元素比另一个多4倍。像孩子和父母一样,但我需要有相应的元素。将以下两个索引视为级别

的示例
1 5 9  13
2 6 10 14   and  1 3
3 7 11 15        2 4
4 8 12 16    

所以例如,当我从第一个矩阵获得1,2,5,6个元素索引时,或者当我有3,4,7时,我希望从第二个矩阵中通过索引1接收元素,8或3为9,10,16,14等。我怎么能这样做?

作为另一个级别的另一个例子:

1 9  17 25 33 41 49 57
2 10 18 26 34 42 50 58
3 11 19 27 35 43 51 59  and  1 5 9  13
4 12 20 28 36 44 52 60       2 6 10 14
5 13 21 29 37 45 53 61       3 7 11 15
6 14 22 30 38 46 54 62       4 8 12 16
7 15 23 31 39 47 55 63
8 16 24 32 40 48 56 64

3 个答案:

答案 0 :(得分:2)

这是一种方法:

% Size of matrix A (8x8)
sizeA = 8;

% Size of matrix B (4x4)
sizeB = 4;

% Index of element on matrix A
idxA = 43;

% That is how you can get the corresponding index on matrix B
[r, c] = ind2sub([sizeA sizeA], idxA);
idxB = sub2ind([sizeB sizeB], ceil(r / 2), ceil(c / 2))

它会给你idxB = 10

答案 1 :(得分:1)

reshape可能对您有所帮助。

考虑

A = [1 5 9  13;
     2 6 10 14;
     3 7 11 15;
     4 8 12 16];
B = reshape(permute(reshape(A, [2 2 2 2]), [2 4 1 3]), [4 4]);
B
  1  2  5  6
  3  4  7  8
  9 10 13 14
 11 12 15 16 

现在,您可以很好地将索引从一个级别映射到下一个级别。

B(1,:)对应于映射到第二个数组中元素1的所有索引等。

当矩阵变大(2n x 2n)时,操作变为

B = reshape(permute(reshape(A, [2 n 2 n]), [2 4 1 3]), [n*n 4]);

答案 2 :(得分:0)

如果您知道第一个矩阵的二维索引,那么您只需将每个矩阵除以2得到第二对索引:

r = 3;
c = 2;
% Then A(r,c) corresponds to B(floor(r/2), floor(c/2))

如果您不知道索引,而是拥有元素值本身,则必须首先找到2D索引:

val = 7;  % test value
[r c] = find(A==val);
other_val = B(floor(r/2), floor(c/2));