1

我知道一个矩阵说mat,如果我想删除所有满足特定条件的元素(元素方式),例如删除所有零,这会做:

mat(mat == 0) = [];

但是我怎么能做这个子矩阵,即在给定条件下删除矩阵子矩阵元素。例如,data4d是一个大小为 的 4D 矩阵n1 x n2 x n3 x n4i如果第四维的-th( 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
4

1 回答 1

2

使用anyreshape的单线:

data4D(:,:,:,~any(reshape(data4D,n1*n2*n3,n4),1)) = [];
于 2014-10-05T02:55:21.413 回答