Mathematicaは、MATLABの「ユニーク」機能と同等の機能を持っています

StackOverflow https://stackoverflow.com/questions/2203737

  •  18-09-2019
  •  | 
  •  

質問

MATLABでunique()機能と同等の結果を提供Mathematicaの機能はありますか?私はリストのユニークな要素を取得するためにUnion[]関数を使用することができ、私は、入力配列とユニークな値の配列間のマッピング索引アレイを提供する機能の三結果バージョンと等価なものを希望実現します。

何も内蔵されていない場合は、

、その関数の実装がどこかにありますか?誰かがここでそれを構築する方法を知っていますか?

役に立ちましたか?

解決

あなたは簡単に自分では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

他のヒント

Length[Union[x]]を試してみてください。 If x=[1,0,1,1,1]、あなたはLength[Union[x]] = 2を取得します。

簡単な方法はあります:

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}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top