查找与 matlab 中的向量具有相同顺序的向量的唯一值
Find unique values of a vector with same order as in the vector in matlab
我有一个向量 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]
假设你有一个 vector(所以 '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)
).
如果您正在使用 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;
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
我有一个向量 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]
假设你有一个 vector(所以 '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)
).
如果您正在使用 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;
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