【问题标题】:Convert subarray index to array index in MATLAB?在MATLAB中将子数组索引转换为数组索引?
【发布时间】:2014-12-11 15:41:58
【问题描述】:

假设我有一个数组

A = [12 52 12 62 42];

使用“逻辑提取索引”C = logical([1 1 0 1 0]),我形成了一个子数组

B = A(C);

问题

什么是在A 中查找元素索引的优雅方法,假设它在B 中的索引是2?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这里有两个选项,要么查找B 的元素与A 的元素匹配的位置,如果A 有重复,则可能会失败,或者使用C 矩阵查找n'第一个。

    A = [12 52 12 62 42];
    C = logical([1 1 0 1 0])
    B = A(C)
    
    [~,idx]=find(A==B(3)) %// finds where the third element of B was in A
    idx=find(cumsum(C)==3,1) %// finds where the third 1 in C is
    

    【讨论】:

    • 加 1,cumsum 太聪明了。
    • 另外,A.*C 为您提供了一个向量,其元素为 A,其中 C 为 1,在 C 为 0 时为零,这可能很有用。您也可以在代码中使用它,具体取决于您要实现的目标。
    【解决方案2】:

    find 给出了答案。让indB 表示B 中的索引。那么A中的索引,表示为indA,就是

    indA = find(C); %// find nonzeros in C
    indA = indA(indB); %// take the indB-th nonzero in C
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 2022-01-05
      • 1970-01-01
      • 2020-09-07
      相关资源
      最近更新 更多