reshape
및 permute
을 통해 확인할 수 있습니다. 첫째, 재구성이 어떻게 작동하는지 이해하십시오.
c = randi(9,[2 2 3])
c(:,:,1) =
5 8
2 6
c(:,:,2) =
4 4
5 1
c(:,:,3) =
3 2
2 3
2 x 6
행렬에 c를 형성합시다.
ans =
5 8 4 4 3 2
2 6 5 1 2 3
이제 6 x 2
행렬입니다.
ans =
5 4
2 1
8 3
6 2
4 2
5 3
은 재 형성된 매트릭스를 생성하는 동안, MATLAB이
c
의 제 치수를 탐색 시작과 재 형성된 매트릭스 (첫 번째 열에 즉 행을 따라) 제 치수를 따라 놓는다 것을 알 수있다. 구체적으로, 재구성 된 행렬의 제 1 열을 형성하는
.
하여 20x3
행렬 즉 사차원의 행을 따라 것
하여 예에 다시 고쳐 행렬의 첫 번째 열을 예정. 첫 번째 행은 20x3
하위 행렬의 항목, 즉 다섯 번째 차원을 따릅니다. 당신이 고쳐 매트릭스 (1,1)
에서 (1,2)
에 통과 그러나, 당신이 당신의 처음 세 차원에서 모든 요소를 수용해야합니다 (예 : 128, 128, 64
을, 왜? 먼저, 다음 다음 y
과 당신의 x
차원을 통과하기 때문에 마지막으로 z
치수) . 따라서 귀하의 대답은 차원을 따라 이동하려는 것입니다 : 4,1,2,3,5
그 순서대로.
답변 : 당신은 그냥`res`을 미리 할당하는 경우 그런데
sz_A = size(A);
p = sz_A(4)*prod(sz_A(1:3))
reshaped_A = reshape(permute(A,[4, 1, 2, 3, 5]), [p size(A,5)])
, 코드는 빠른 (상대적으로)입니다. 첫 번째 for 루프 앞에'res = -1 * ones (128 * 128 * 64 * 20, 3)'를 포함하여 사전 할당하십시오. 훨씬 더 빠른 대안은 아래의 해답을보십시오. –
왼쪽에있는 체크 표시를 클릭하여 대답을 수락하십시오. 그러면 답변되지 않은 질문 목록에서 빠져 나올 수 있습니다. –