代码之家  ›  专栏  ›  技术社区  ›  clartaq

Mathematica是否具有相当于Matlab“唯一”函数的函数?

  •  7
  • clartaq  · 技术社区  · 14 年前

    是否有一个Mathematica函数提供与 unique() matlab中的函数?我知道我可以用 Union[] 函数来获取列表中唯一的元素,但我希望得到与函数的三个结果版本等效的内容,该函数提供索引数组,这些索引数组映射在输入数组和唯一值数组之间。

    如果没有内置的东西,是否在某个地方有该函数的实现?这里有人知道如何建造它吗?

    3 回复  |  直到 7 年前
        1
  •  8
  •   Timo    14 年前

    使用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
    
        2
  •  1
  •   René Höhle oasisfleeting    10 年前

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

        3
  •  1
  •   earnric    7 年前

    有一个简单的方法:

    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}