2014-04-10 5 views
1

A라는 2D 배열이 있다고 가정 해 봅시다. B라는 3D 배열을 만들고 싶습니다. "페이지"는 스텐실의 선택 열을 A, 열 단위로 이동합니다. 예를 들어, B의 첫 번째 페이지는 A의 1, 3 및 5 열일 수 있습니다. 그런 다음 두 번째 페이지는 A의 두 번째, 네 번째 및 여섯 번째 열이됩니다.MATLAB에서 2D 배열의 열을 stenciling하여 3D 배열을 만들려면 어떻게해야합니까?

누구나 효율적인 방법을가집니다. 이 일을 MATLAB입니까?

감사합니다. 내가 당신을 추측하고

답변

2

이 찾고 있습니다 -

%%// Given 2D array 
A = randi(10,4,12) 

t1 = reshape(A,size(A,1)*2,[]); 
t2 = reshape(t1',size(A,2)/2,[],2); %%//' 
B = permute(t2,[2 1 3]) %%// Output 3D array 

출력 -

B(:,:,1)=A(:,1:2:end); 
B(:,:,2)=A(:,2:2:end); 
- 물론

A = 

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


B(:,:,1) = 

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


B(:,:,2) = 

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

이,이 특별한 경우에 대한 대안 똑바로 앞으로 접근 방식이

+1

이것은 흥미로운 해결책입니다 - 내 현재 for-loop보다 낫습니다. 감사! – user3257898

관련 문제