【问题标题】:Delete rows with 0 for specific columns in Matlab删除Matlab中特定列的0行
【发布时间】:2016-03-04 10:42:02
【问题描述】:

所以我想删除矩阵中包含零的行,但仅限于特定列。例如:

A = [[0 0 0 0; 1 2 0 4; 2 0 1 1; 0 0 0 0; 1 2 3 4; 0 1 2 3];

我想让矩阵 A 检查第二和/或第四列是否包含零。如果这是真的:然后删除整行。所以结果应该是:

A = [1 2 0 4; 1 2 3 4; 0 1 2 3];

我使用了这个功能:

new_a = A(all(A,2),:) 

但是我删除了所有包含零的行。

【问题讨论】:

    标签: matlab matrix delete-row


    【解决方案1】:

    你可以写

    >>> secondColIsNonzero = A(:, 2) ~= 0;
    >>> fourthColIsNonzero = A(:, 4) ~= 0;
    >>> keep = secondColIsNonzero & fourthColIsNonzero;
    >>> newA = A(keep, :)
    newA =
         1     2     0     4
         1     2     3     4
         0     1     2     3
    

    保留(即不删除)第 2 列或第 4 列都不为零的列。

    对于一个不太冗长的解决方案,请考虑同时索引​​两个列并使用带有维度参数的all

    keep = all(A(:, [2 4]) ~= 0, 2)
    

    【讨论】:

    • 感谢您的回答,现在我对我的问题进行了扩展。例如,现在我希望第 2 列和第 4 列为零,我希望这些行不在矩阵中。所以新的矩阵应该是: A = [1 2 0 4; 2 0 1 1; 1 2 3 4; 0 1 2 3];你能帮我写代码吗?非常感谢
    • 然后,您要保留所有 col2 或 col4 中至少一个为非零的列。这可以表示为:keep = any(A(:, [2 4]) ~= 0, 2)
    【解决方案2】:

    使用find() 函数很容易解决这个问题:

    B = A(find(A(:,2)~=0),:)
    

    find() 默认返回行,所以在这种情况下调用它会返回第二列值不为 0 的行的索引。

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 1970-01-01
      • 2022-11-27
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多