【问题标题】:How to retain only those rows in a matrix corresponding to the values in another matrix?如何只保留矩阵中与另一个矩阵中的值相对应的那些行?
【发布时间】:2018-06-13 04:30:38
【问题描述】:

我有一个 m x n 矩阵 A,其中 m 和 n 都是非常大的值,另一个列矩阵 B(具有重复值)包含一些行值。我需要创建一个新矩阵,该矩阵仅保留 A 中按该顺序出现在 B 中的那些行,并丢弃其余的行。

例子:

A = [2 5 6;
     7 3 9;
    -6 4 5;
     6 7 3];

B = [2;
     4;
     2;
     1]; 

输出 C 应包含 A 的行,如下所示:

C = [7 3 9;
     6 7 3;
     7 3 9;
     2 5 6];

我已经使用了这个循环,并尝试在不需要新矩阵 C 的情况下这样做,但它是错误的。

for n = 1:length(B)
   A(~B(n),:)=[];
end

如果变量不是矩阵而是对象,上述解决方案对变量是否同样有效?

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    一切都与索引有关:

    A = [
      2 5 6;
      7 3 9;
     -6 4 5;
      6 7 3
    ];
    
    B = [2; 4; 2; 1];
    
    % use B to index the rows of A, basically you
    % you tell Matlab to create a new matrix C
    % from the rows 2, 4, 2 (again) and 1 of A
    
    C = A(B,:)
    

    这个输出:

    C =
    
       7  3  9
       6  7  3
       7  3  9
       2  5  6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多