【问题标题】:How to remove matrix sub-matrix elements given conditions?如何在给定条件下删除矩阵子矩阵元素?
【发布时间】:2026-02-13 09:15:02
【问题描述】:

我知道一个矩阵说mat,如果我想删除所有满足特定条件的元素(元素方面),例如删除所有零,这样就可以了:

mat(mat == 0) = [];

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

【问题讨论】:

    标签: matlab matrix submatrix


    【解决方案1】:

    使用anyreshape 的单线:

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

    【讨论】: