将向量中的元素映射到相关但更大的向量

时间:2018-09-28 11:33:31

标签: matlab

在Matlab中,我需要一些帮助将元素从短向量映射到大向量。我可以使用for循环来做到这一点,但是我敢肯定有办法避免这种情况。

我有相同大小的输入向量:A = [2 3 5]和B = [0.1 0.3 0.23]。向量A包含“索引”和向量B数据。给定第三个输入向量C = [2 2 2 3 3 3 3 5 5],现在我想生成向量D = [0.1 0.1 0.1 0.3 0.3 0.3 0.3 0.3 0.3 0.23 0.23]。

如何在Matlab中不使用for循环生成向量D?

提前谢谢!

3 个答案:

答案 0 :(得分:2)

A = [2 3 5];
B = [0.1 0.3 0.23];
C = [2 2 2 3 3 3 3 5 5];

使用legal code of the Creative Commons Attribution-ShareAlike 3.0 Unported的第二个输出来创建索引向量:

[~, ind] = ismember(C, A);
D = B(ind);

或者,使用ismember

D = interp1(A, B, C);

答案 1 :(得分:2)

您也可以使用uniqueC中查找每个元素的索引,假设这些值与A中的值完全对应。如果A未排序,那么我们必须首先对B的项目进行排序,以匹配unique给定的索引:

A = [2 3 5];
B = [0.1 0.3 0.23];
C = [2 2 2 3 3 3 3 5 5];

[~,isort] = sort(A);
Bsort = B(isort);    % sorted according to A
[~,~,k] = unique(C); % indices of items in C to pick from A
D = Bsort(k);        % each matching element from (sorted) B

答案 2 :(得分:1)

如果索引向量的元素是正整数,则可以使用索引:

idx(A,1) = 1:numel(A);
D = B(idx(C));

如果A包含大数值的正整数,则可以使用稀疏矩阵:

idx = sparse(A,1,1:numel(A));
D = B(idx(C));