2014-04-11 53 views
0

在一个算法中,在每个级别中,我有两个对应的矩阵,其中一个矩阵的元素比另一个多4倍。像孩子和父母,但我需要有相应的元素。考虑以下两个指标作为一个例子为一个水平matlab中两个不同矩阵的相应索引

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

所以例如,我想按1索引从所述第二矩阵以接收元件当我有1,2,5,6各元件的指数从第一矩阵或2当我有3,4,7,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 
+1

不确定您的意思是“我想要接收元素1元素索引”。你能更清楚地解释“对于这两个矩阵A和B,当输入是X时,我希望输出是Y”。 – Floris

回答

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

0

如果你知道第一个矩阵二维指数,那么你只要将每笔2就得到第二对指数:

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

如果您不知道指数,而是具有元素值本身,则必须先找到二维指数:

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

Peter:我想使用列明智索引,假设包含更多元素的矩阵被分成4个部分,例如由索引1,2,5,6组成的元素在一起,因为我使用的是循环,我有1,2,5或6我想要从第二个矩阵索引1的元素 – user3482383

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]);