【问题标题】:Split array based on given indices基于给定索引拆分数组
【发布时间】:2019-08-15 06:48:22
【问题描述】:

我想根据给定的索引将一个数组分成两个。具体来说,有两个数组,一个包含数据(3 列)的数组 A 和一个包含索引的 B。

A = [10 11 12; 
     20 21 22; 
     30 31 32; 
     40 41 42]
B = [1 3]

因此,我想要两个新数组 C 和 D,其中 C 包括 B 和 D 中给定索引上 A 中的所有值,包括其余值。

C = [10 11 12; 
     30 31 32] 
D = [20 21 22; 
     40 41 42]

现在,我有一个循环(使用 ismember 检查 B 中的 i 并相应地将 A 中的值附加到数组 C/D),但由于我有很多数据,所以需要很长时间。任何帮助表示赞赏,我知道 matlab 中的所有内容都有一个数组函数。

【问题讨论】:

    标签: matlab matrix-indexing


    【解决方案1】:

    这个问题最具挑战性的部分是获取D。您可以免费将A 分配给D 并删除不需要的行。

    C = A(B,:);
    D = A;
    D(B,:) = [];
    

    【讨论】:

    • 如果你不需要保留A这个方案特别好,因为你显然可以跳过D和A(B,:)=[]的中间创建。
    【解决方案2】:

    给定

    A = [10 11 12; 
         20 21 22; 
         30 31 32; 
         40 41 42];
    B = [1 3];
    

    我们可以通过一些简单的索引来创建 C

    C = A( B, : ); % rows from A indexed by B, all columns
    

    并使用A的所有行索引的setdiff和数组B创建D

    D = A( setdiff( 1:size(A,1), B ), : ); % rows from A *not* indexed by B, all columns
    

    【讨论】:

      猜你喜欢
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 2019-10-07
      • 2021-04-22
      相关资源
      最近更新 更多