罗兰关于MATLAB的艺术

将想法转化为MATLAB

没有重排的唯一值

在MATLAB中,函数的最简单形式独特的返回数字向量中包含的唯一值,并将结果排序。这通常是可以接受的,但有时一个用户按数据中最初发现的顺序选择结果。

内容

独特的算法

结果被排序的原因是由于使用的算法独特的.从概念上讲,先对输入数据进行排序,然后对相邻元素进行比较。如果有相等的元素,则除去第一个或最后一个元素之外的所有元素(取决于您如何调用函数)。因此,输出是排序的。

避免排序输出

为了避免排序输出,您可以简单地排序首先是数据,保留排序操作的索引。研究以下例子排序来了解如何使用索引的第二个输出。

发布的一些解决方案有类似的想法,但实现方式不同金宝搏官方网站。我来给你介绍一下简•西蒙.简的想法是区别,并找出在什么地方差异不为零(即,它们不同的值)。现在就为它们创建正确的索引独特的值在逻辑向量中紫外线.最后,使用这组逻辑索引从原始数据中提取所需的值。注意这个解决方案没有调用这个函数独特的并且只调用函数排序一次。

代码在行动

让我们创建X看看代码中会发生什么。

myString =“现在是欢呼的时候了,星期五!”;X =双(myString)
X =列1到13 110 111 119 32 105 115 32 116 104 101 32 116 105列14到26 109 101 32 102 111 114 32 99 104 101 101 114 105列27到35 110 103 44 32 116 103 105 102 33

你可以看到数据X现在已经排序了XsSortVec跟踪值的原始位置。

[Xs, SortVec] = sort(X(:))
x = 32 32 32 32 32 32 33 44 99 101 101 101 101 102 102 103 103 104 104 105 105 105 105 109 110 110 111 111 114 114 115 116 116 116 119 SortVec = 4 7 11 16 20 30 35 29 21 10 15 23 24 17 34 28 32 9 22 5 13 26 33 14 1 27 2 18 19 25 6 8 12 31 3

现在放置唯一的值(whendiff不是0)进入一个逻辑向量根据排序。

紫外线(SortVec) = ([1;diff (x)] ~ = 0)
UV = column 1 to 13 1 1 1 1 1 1 0 1 1 1 0 0 0 column 14 to 26 1 0 0 1 0 0 1 0 0 1 0 0 0 column 27 to 35 0 1 1 0 0 0 0 1

使用逻辑向量重新打乱原始数据的排序。

Y = X(紫外线)
Y =列1到13 110 111 119 32 105 115 116 104 101 109 102 114 99列14到16 103 44 33
finalString = char (Y)
finalString = now isthemfrcg,!

你的唯一数据值是无序的吗?

您是否需要未排序的唯一值作为数据处理的一部分?我想听更多在这里.与此同时,也许你可以通过这个算法运行你的想法来创建一个当天的神秘签名!




MATLAB®7.9发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。