2014-10-05 4 views
1

특정 조건을 만족하는 모든 요소 (요소 별)를 삭제하려는 경우 행렬에 대해 mat이라고 말합니다.주어진 조건 행렬 부분 행렬 요소를 제거하는 방법?

mat(mat == 0) = []; 

을하지만이 서브 매트릭스 지혜, 즉 조건이 주어진 행렬의 서브 매트릭스 요소를 제거 할 수있는 방법 : 모두 0을 제거, 이것은 할 것입니다. 예를 들어 data4d은 크기가 n1 x n2 x n3 x n4 인 4D 행렬입니다. 네 번째 차원의 i 번째 (1=<i<=n4) 부분 행렬의 모든 요소 즉, data4d(:, :, :, i) == zeros(n1, n2, n3)이 제거되면, 즉 data4d(:, :, :, i) = []이 제거됩니다.

간단한 for 루프가 없으면 어떻게 할 수 있습니까? 모두 다음과 같은 두 가지 버전이 작동하지 않습니다 :

data4d(data4d == zeros(n1, n2, n3)) = [];  // version 1 
data4d(data4d == zeros(n1, n2, n3, 1)) = []; // version 2 

답변

2

anyreshape를 사용하여 한 - 라이너 :

data4D(:,:,:,~any(reshape(data4D,n1*n2*n3,n4),1)) = [];