【发布时间】:2019-05-28 02:45:06
【问题描述】:
[uniq_elements,uniq_indices]=unique(x)
显示独特的元素,例如矢量x。
什么是简单(即单行)和高效(即快速执行时间)的方法来简单且仅指示“此值是否唯一”和“如果不是”输出一系列重复项中的第一个?有没有办法使用逻辑运算符来解决这个问题?简单地让一个函数输出“这个值是否唯一”可能是一个开始。
示例代码:
x=[5 5 2 2 3 4 4 1 1 1]; %example values
[~,uniq_indices]=unique(x); %returns [1,3,5,6,8]
result=false(size(x));
result(uniq_indices)=1
%console ouput:
result =
1×10 logical array
1 0 1 0 1 1 0 1 0 0
基本上我的假设是——因为只需要逻辑输出——上述代码可以更快/更容易地实现。
【问题讨论】:
-
您的代码不会标记唯一项目,它也会标记每组重复项中的第一个。我对“独一无二”的理解不同。
-
为什么你现有的代码不能令人满意?在我的快速测试中它非常快......
-
@Wolfie:可能是这样,我只是想摆脱它,因为我有一种直觉,它可以做得更好——如上所述,这是个人假设,可能是错误的(事实上,它将是我的偏好)
-
我的目标是这个;
unique在内部使用sort(您可以通过运行edit unique看到这一点),然后获取相邻元素不相等的所有位置。要获得uniq_indices,排序会被反转,并调用额外的find(以及所有内部检查)。如果你很高兴有一个排序的输入数组,以及对应的唯一值逻辑数组,你可以自己做sort和diff -
MATLAB 的
unique创建一个所有元素都是唯一的数组。它检索每组相同元素的一个示例。它并不声称要找到独特的元素。如果您正在寻找其中任何一个选项,我不知道该瞄准什么。我建议你决定你需要哪一个。 :)
标签: matlab