2014-04-11 2 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  

그래서 예를 들어, I는 2 매트릭스 1의 인덱스 요소를 수신 할

레벨에 대한 일례로서, 다음의 두 가지 지표를 고려 ​​제가 1,2,5,6- 요소 각각있을 때 첫 번째 행렬의 인덱스 또는 9,10,16,14 등의 경우 3,4,7,8 또는 3 일 때 2입니다. 내가 어떻게 할 수 있니? AS를

다른 수준에 대한 또 다른 예 :

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

색인을 모르지만 요소 값 자체가있는 경우 먼저 2D 색인을 찾아야합니다.

+0

피터 : 나는 현명한 색인 열을 사용하고 싶다. 더 많은 요소가있는 행렬이 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]); 
관련 문제