2014-10-05 61 views
1

我知道一個矩陣如mat,如果我想刪除滿足一定條件的所有元素(元素方式),例如刪除全部爲零,這將做到:如何去除給定條件下的矩陣子矩陣元素?

mat(mat == 0) = []; 

但我怎麼可以這樣子矩陣明智的,即除去給定的條件矩陣子矩陣元素。舉例來說,data4d是一個尺寸爲n1 x n2 x n3 x n4的4D矩陣。如果第四維的i子矩陣的所有元素(即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)) = [];