7

是否有一个 Mathematica 函数可以提供与unique()MATLAB 中的函数等效的结果?我意识到我可以使用该Union[]函数来获取列表的唯一元素,但我想要与函数的三结果版本等效的东西,该函数提供在输入数组和唯一值数组之间映射的索引数组。

如果没有内置任何东西,是否有该功能的实现在某处可用?这里有人知道如何构建它吗?

4

3 回答 3

8

您可以使用 Mathematica 的Position[]. 例如,给定一个数字列表,您可以执行以下操作:

In[1] := A = {1, 5, 2, 3, 7, 3, 2, 8, 6, 5, 9, 2, 1};
In[2] := {#, Flatten[Position[A, #]]} & /@ Union[A]
Out[2]:= {{1, {1, 13}}, {2, {3, 7, 12}}, {3, {4, 6}}, {5, {2, 10}}, {6, {9}}, {7, {5}}, {8, {8}}, {9, {11}}}

获取唯一元素列表以及它们在原始列表中出现的位置的索引。准确复制 Matlab 的功能Unique(),特别是对于

[b,m,n] = unique(A)

你需要

b = Union[A];
m = Last[Position[A, #]] & /@ b // Flatten;
n = Position[b, #] & /@ A // Flatten;

现在提供所需的行为

In[1] := A[[#]] & /@ m == b
Out[1]:= True

In[2] := b[[#]] & /@ n == A
Out[2]:= True
于 2010-02-05T07:18:03.437 回答
1

试试Length[Union[x]]If x=[1,0,1,1,1],然后你会得到Length[Union[x]] = 2

于 2014-11-08T18:53:28.500 回答
1

有一个简单的方法:

a={1,2,3,4,5,5,5,4,3,2}

  {1,2,3,4,5,5,5,4,3,2}

uniques = DeleteDuplicates[a]

  {1,2,3,4,5}
于 2017-03-09T05:20:25.910 回答