2014-10-05 1 views
1

Я знаю, что для матрицы говорят mat, если я хочу удалить все элементы (по элементам), которые удовлетворяют определенным условиям, например. удалить все нули, то это будет делать:Как удалить матричные элементы подматрицы при заданных условиях?

mat(mat == 0) = []; 

Но как я могу сделать это подматрицы-мудры, то есть удалить матричные суб-матричные элементы, приведенные условия. В качестве примера data4d представляет собой 4D-матрицу размером n1 x n2 x n3 x n4. Если все элементы подматрицы 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

Однострочник использованием any и reshape:

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