거대한 4D 행렬이 있고 2D 행렬로 분할해야합니다.4D 행렬을 2D 조각으로 자르기 MatLab
이slice1 = 4dmatrix(:,:,1,1)
slice2 = 4dmatrix(:,:,1,2)
등 하지만 루프를 사용하여이 작업을 수행하는 방법을 작동하지 않을 수 있습니다 : 그것은 수동으로 하나 하나를 이렇게 쉽다. 지금까지 본 모든 것이 원래의 매트릭스를 재구성합니다 (나는 원하지 않습니다).
거대한 4D 행렬이 있고 2D 행렬로 분할해야합니다.4D 행렬을 2D 조각으로 자르기 MatLab
이slice1 = 4dmatrix(:,:,1,1)
slice2 = 4dmatrix(:,:,1,2)
등 하지만 루프를 사용하여이 작업을 수행하는 방법을 작동하지 않을 수 있습니다 : 그것은 수동으로 하나 하나를 이렇게 쉽다. 지금까지 본 모든 것이 원래의 매트릭스를 재구성합니다 (나는 원하지 않습니다).
당신은 단순히 두 개의 액세스 변수는 1 할 권리 조각에 액세스 for
루프의 한 쌍을 사용할 수 있습니다 :
for ii = 1 : size(fourDMatrix, 3)
for jj = 1 : size(fourDMatrix, 4)
slice = fourDMatrix(:, :, ii, jj);
% Do your processing here...
end
end
그러나, 나는 reshape
를 사용하는 것이 좋습니다 수 있다면, 당신은 그것을 사용한다 . 이 각각의 조각이 당신의 4D 매트릭스에서 2D 조각 인 3D 매트릭스를 만들 reshape
을 사용할 수 있으며, 당신은 단순히 수행
slices = reshape(fourDMatrix, size(fourDMatrix, 1), size(fourDMatrix,2), []);
이은 행과 열은 것과 동일한 차원 매트릭스를 생성합니다 4D 매트릭스에서. 그러나 코드 끝에있는 []
은 4D 행렬을 자동으로 풀어서 3 차원을 따라 발생하고 4 차원을 뒤 따르게됩니다. 기본적으로 3D 매트릭스에 몇 개의 2D 슬라이스가 있는지를 자동으로 계산합니다. 예를 들어, 만약 당신의 4D 행렬은 slices(:,:,2)
는 A(:,:,2,1);
에 해당하며 slices(:,:,6)
는 A(:,:,2,2)
에 해당하고, 위의 코드는 slices(:,:,1)
이 A(:,:,1,1)
에 해당하는 9 x 9 x 16
매트릭스를 생성합니다, A
을 불러 크기 9 x 9 x 4 x 4
를 펼쳤습니다. 일반적으로 slices(:,:,kk)
은 A(:,:,floor(kk/size(A,2)) + 1, mod(kk,size(A,2)) + 1
에서 슬라이스에 액세스합니다.
1 : 변수 이름은 MATLAB에서 숫자로 시작할 수 없습니다. 변수 이름을 fourDMatrix
으로 변경했습니다.
그래서 정확히 무엇을 원하니? 각 슬라이스가이 4D 매트릭스의 2D 슬라이스 인 3D 매트릭스를 생성 하시겠습니까? 원하는 출력은 무엇입니까? – rayryeng
'ii'와'jj'를 둘러싼 루프'D4matrix (:, :, ii, jj)'에서이 방법으로 색인을 작성하십시오. 모든 2D 슬라이스를 별도로 만들지 마십시오 (동적 변수 이름 지정) (http://stackoverflow.com/questions/32467029/how-to-put-these-images-together/32467170#32467170). 나쁜 프로그래밍 습관. 또한 변수 이름이 숫자로 시작될 수 없기 때문에 실제로'4dmatrix'라는 행렬의 이름을 지정할 수 없습니다. – Adriaan