在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?
提前谢谢!
答案 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)
您也可以使用unique
在C
中查找每个元素的索引,假设这些值与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));