2013-12-23 3 views
0

행렬 요소를 블록으로 할당하는 함수가 Matlab에 있습니까? 예를 들어 행렬 A =Matlab 행렬 조작

1  1  3  3  3  3  3  8  8 10 
1  1  3  3  3  3  3  8  8 10 
1  1  4  4  4  4  4  8  8 10 
1  1  4  4  4  4  4  8  8 10 
1  1  5  5  5  5  5  8  8 10 
2  2  5  5  5  5  5  9  9 10 
2  2  6  6  6  6  6  9  9 10 
2  2  6  6  6  6  6  9  9 10 
2  2  7  7  7  7  7  9  9 10 
2  2  7  7  7  7  7  9  9 10 

매트릭스 B = 사용자는 행렬 A의 1에 해당하는 매트릭스 B의 요소가 행렬로 이동 다른 행렬 C를 만들려고

1  1  1  1  1  1  1  1  1  1 
2  2  2  2  2  2  2  2  2  2 
3  3  3  3  3  3  3  3  3  3 
4  4  4  4  4  4  4  4  4  4 
5  5  5  5  5  5  5  5  5  5 
6  6  6  6  6  6  6  6  6  6 
7  7  7  7  7  7  7  7  7  7 
8  8  8  8  8  8  8  8  8  8 
9  9  9  9  9  9  9  9  9  9 
10 10 10 10 10 10 10 10 10 10 

C (동일한 위치)에서 행렬 A의 2에 해당하는 행렬 B의 요소도 행렬 C로 이동합니다 (같은 위치에 있음).

답변

2

I t 것 매우 간단한 사용의 MATLAB 사업자 (이 경우 평등 ==), 그리고 당신이 기능이 필요하지 않습니다.

A == 1는 모든 인덱스를 반환 A (또는 B)는 부울 매트릭스 1 같다고 :

이어서 B(A == 1)
>> A == 1 

ans = 

    1  1  0  0  0  0  0  0  0  0 
    1  1  0  0  0  0  0  0  0  0 
    1  1  0  0  0  0  0  0  0  0 
    1  1  0  0  0  0  0  0  0  0 
    1  1  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0 

가 (B에서는, 상기 결과의 모든 사실 요소를 반환) 벡터 형태 :

>> B(A == 1) 

ans = 

    1 
    2 
    3 
    4 
    5 
    1 
    2 
    3 
    4 
    5 

그래서 당신이 필요 동일시하는 것입니다 C(A == n)B(A == n)에 :

C = zeros(size(B)); % Create a matrix C with proper size 

for k = 1:10 
    inds = A == k; % indices of A, B or C that correspond to A == k 
    C(inds) = B(inds); 
end 
0

내가 올바르게 이해하고 있는지 확신 할 수 없지만 그와 비슷한 것을 시도하고 있습니까?

C = zeros(size(A)); 
for k=1:10 
    C(B==k) = A(B==k); % or is it C(A==k) = B(A==k) ? 
end