查找向量的唯一值,其顺序与matlab中的向量相同
我有一个向量a=[2,5,6,2,4,13,34,3,34]。我想找到这个向量的唯一值,但不是按排序顺序!我在Matlab网站上搜索,找到了这个函数查找向量的唯一值,其顺序与matlab中的向量相同,matlab,vector,unique,Matlab,Vector,Unique,我有一个向量a=[2,5,6,2,4,13,34,3,34]。我想找到这个向量的唯一值,但不是按排序顺序!我在Matlab网站上搜索,找到了这个函数 [C, ia, ic] = unique(A,'rows','stable') 但是这个函数在MatlabR2011A中是无法识别的!可能此功能适用于高于2011的版本!!任何人都知道我如何才能找到与like相同顺序的A的唯一值: A=[2,5,6,4,13,34,3]假设你有一个向量(因此'rows'版本没有意义),下面是一个基于以下内容的解决
[C, ia, ic] = unique(A,'rows','stable')
但是这个函数在MatlabR2011A中是无法识别的!可能此功能适用于高于2011的版本!!任何人都知道我如何才能找到与like相同顺序的A的唯一值:
A=[2,5,6,4,13,34,3]假设你有一个向量(因此'rows'
版本没有意义),下面是一个基于以下内容的解决方案:
工作原理:在元素之间进行所有成对比较(
bsxfun(@eq,A,A.))
)。对于每个元素,找到第一个相等元素的索引([~,ind]=max(…)
)。如果该索引小于当前位置(即,如果存在与当前位置相等的前一个元素),则忽略它(ind=ind(ind>=…
)。使用剩余索引生成结果(C=a(ind)
).如果您使用的是二维阵列,并且希望获得与unique(A,'rows','stable')相同的功能,那么这里有一个实现。
-
那么错误是什么呢?我怀疑你认为你的版本不支持这一点是错误的。
'rows'
不是你想要的向量。为什么你有rows
?示例a
只有一列。你在使用2D数组吗?@knedlsepp在旧的Matlab版本中是unique
的结果已排序,而不是原始格式order@LuisMendo:我确实看过了,只能在2013年和2006年找到更改。2013年的更改与'stable'
没有任何关系。因此我怀疑2011版应该能够处理'stable'
。我认为它可以处理2007年我开始使用时的'stable'
g它,但我可能错了。@knedlsepp r2100b不支持它在所有版本中都不sort
稳定吗?这会更有效。(使用sort
和的第二个输出)@knedlseppsort
是稳定的,是的。但我不知道这如何取代我使用的bsxfun
。这可能是可以做到的,但用一种不同的方法。它看起来很有趣;也许你可以自己发布一个答案?THX Luis,这正是我需要与bsxfun
配合使用的地方!@Divakar哦,我明白了。不,它没有。问题是confusing,因为它的标题是“查找向量的唯一值”,但随后使用了“行”
好的一行。(尽管我感觉OP可能会回答:它不起作用;;-)因为我怀疑OP首先选择了有效的解决方案,而不是这种美。在另一个故事中:我认为我们可以通过如下方式摆脱ismember
:invOrder(ordered\u ind)=1:length(ordered\u ind);ic=发票人(标签)代码>@knedlsepp该建议有效!非常感谢。是的,就这样吧,因为弗拉德米尔已经这么做了。可能会在那里添加bsxfun
:)你确实喜欢你的bsxfun
;-)很好地使用了索引
,最后!
[~, ind] = max(bsxfun(@eq, A, A.'));
ind = ind(ind>=1:numel(ind));
C = A(ind);
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