在matlab中找到与向量中相同顺序的向量的唯一值

时间:2015-02-21 16:58:32

标签: matlab vector unique

我有一个向量A = [2,5,6,2,4,13,34,3,34]。我想找到这个向量的唯一值,但不是按排序顺序!我在Matlab网站上搜索过,我发现了这个功能

[C, ia, ic] = unique(A,'rows','stable')

但在Matlab R2011a中无法识别此功能!可能这个功能适用于高于2011的版本!任何人都知道如何找到A的唯一值,其顺序与A中的相同: A = [2,5,6,4,13,34,3]

3 个答案:

答案 0 :(得分:5)

如果您正在使用2D数组并希望获得与unique(A,'rows','stable')相同的功能,那么这是一个实现 -

function [C, ia, ic] = unique_rows_stable(A)

[unqmat_notinorder,row_ind,labels] = unique(A,'rows','first');

[ia,ordered_ind] = sort(row_ind);

C = unqmat_notinorder(ordered_ind,:);

[~,ic] = ismember(labels,ordered_ind);
%// Or [ic,~] = find(bsxfun(@eq,ordered_ind,labels'))

return;

答案 1 :(得分:3)

假设你有一个向量(所以'rows'版本毫无意义),这里有一个基于bsxfun的解决方案:

[~, ind] = max(bsxfun(@eq, A, A.'));
ind = ind(ind>=1:numel(ind));
C = A(ind);

工作原理:完成元素之间的所有成对比较(bsxfun(@eq, A, A.'))。对于每个元素,找到第一个相等元素([~, ind]=max(...))的索引。如果该索引小于当前位置(即,如果前一个元素等于当前位置),则忽略它(ind = ind(ind>=...)。使用幸存的索引生成结果(C = A(ind))。

答案 2 :(得分:2)

A=[2,5,6,2,4,13,34,3,34];
[B, ia] = sort(A);     % B = A(ia)
ib(ia) = 1:length(B);  % A = B(ib)
[C, ic] = unique(B);   % C = B(ic)
D = B(ib(ic));         % unsorted unique values