【问题标题】:Delete the Whole Row and Merge The Next Row in a matrix删除整行并合并矩阵中的下一行
【发布时间】:2012-08-05 01:21:42
【问题描述】:

我有一个矩阵 A =

'30'  'X' '@NA'
'15'  'Y' [231.001] 
'00'  'Y' [21.110]
'20'  'W' '@NA'
'55'  'X' [9.001]
'10'  'X' [11.211]


>>whos A
  Name        Size              Bytes  Class    Attributes

  aaa         6x3               226    cell     

如果第 1 列中除了 '10'、'15'、'20'...'55' 或任何 '@ NA' 在 Column 3 ,并 MERGE 下一个合格的行。

以A为例,第1行和第4行应该删除,因为第3列有'@NA'。第3行也应该删除,因为第1列有'00'。

矩阵B应该喜欢,

>>B

B = 
    '15'  'Y' [231.001] 
    '55'  'X' [9.001]
    '10'  'X' [11.211]

B 是一个 3*3 的单元矩阵。

欢迎提出任何建议!

【问题讨论】:

    标签: matlab matrix delete-row cell-array


    【解决方案1】:

    @paddy 的回答略有不同:

    idx = ismember(A(:,1), num2str((10:5:55)')) & ~strcmp(A(:,3),'@NA');
    B = A(idx,:);
    

    【讨论】:

      【解决方案2】:

      在您的示例中,您没有说出“合并下一个合格行”的意思。您所做的只是选择在一个或另一个条件上失败的行,然后删除它们。如果这实际上是您想要做的所有事情,那么这样的事情就可以了:

      validnums = arrayfun( @num2str, 10:5:55, 'uni', 0 );
      column1valid = ismember( A(:,1), validnums );
      column3valid = cellfun( @isnumeric, A(:,3) )
      B = A( column1valid & column3valid, : );
      

      【讨论】:

      • 逻辑索引好强大!
      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2017-03-22
      • 1970-01-01
      • 2020-09-28
      相关资源
      最近更新 更多