【发布时间】: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
假设我有一个数组
A = [12 52 12 62 42];
使用“逻辑提取索引”C = logical([1 1 0 1 0]),我形成了一个子数组
B = A(C);
问题
什么是在A 中查找元素索引的优雅方法,假设它在B 中的索引是2?
【问题讨论】:
标签: matlab
这里有两个选项,要么查找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
【讨论】:
cumsum 太聪明了。
A.*C 为您提供了一个向量,其元素为 A,其中 C 为 1,在 C 为 0 时为零,这可能很有用。您也可以在代码中使用它,具体取决于您要实现的目标。
find 给出了答案。让indB 表示B 中的索引。那么A中的索引,表示为indA,就是
indA = find(C); %// find nonzeros in C
indA = indA(indB); %// take the indB-th nonzero in C
【讨论】: