poster
2019-12-10, 20:30
是否有Mathematica函数提供与MATLAB中的unique()函数相同的结果?我意识到我可以使用Union[]函数来获取列表的唯一元素,但是我想要一些与该函数的三结果版本等效的功能,该函数提供了在输入数组和唯一值数组之间映射的索引数组。
如果没有内置任何功能,那么该功能的实现在某处可用吗?这里有人知道如何建造吗?
回答:
您可以使用Mathematica的Position[] (http://reference.wolfram.com/mathematica/ref/Position.html)轻松地构建类似的功能。例如,给定一个数字列表,您可以执行以下操作:
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() (http://www.caspur.it/risorse/softappl/doc/matlab_help/techdoc/ref/unique.html) ,尤其是对于
[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
更多&回答... (https://stackoverflow.com/questions/2203737)
如果没有内置任何功能,那么该功能的实现在某处可用吗?这里有人知道如何建造吗?
回答:
您可以使用Mathematica的Position[] (http://reference.wolfram.com/mathematica/ref/Position.html)轻松地构建类似的功能。例如,给定一个数字列表,您可以执行以下操作:
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() (http://www.caspur.it/risorse/softappl/doc/matlab_help/techdoc/ref/unique.html) ,尤其是对于
[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
更多&回答... (https://stackoverflow.com/questions/2203737)