Mathematica 是否有相当于 Matlab 的“独特”功能?功能

发布于 2024-08-20 06:52:17 字数 205 浏览 2 评论 0原文

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

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

Is there a Mathematica function that provides results equivalent to the unique() function in MATLAB? I realize I could use the Union[] function to obtain the unique elements of a list, but I would like something equivalent to the three-result version of the function that provides index arrays that map between the input array and the array of unique values.

If there is nothing built in, is there an implementation of that function available somewhere? Does someone here know how to build it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

给妤﹃绝世温柔 2024-08-27 06:52:17

您可以使用 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

You can easily build similar functionality yourself with Mathematica's Position[]. E.g. given a list of numbers you could do the following:

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}}}

to get the list of unique elements and the indices of where they appear in the original list.
To replicate exactly the functionality of Matlab's Unique(), especially for

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

you need

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

which now provide the desired behavior

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

In[2] := b[[#]] & /@ n == A
Out[2]:= True
贱人配狗天长地久 2024-08-27 06:52:17

有一个简单的方法:

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}

There's a simple way:

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}
孤寂小茶 2024-08-27 06:52:17

尝试长度[Union[x]]如果 x=[1,0,1,1,1],那么您将得到Length[Union[x]] = 2

Try Length[Union[x]]. If x=[1,0,1,1,1], then you'll get Length[Union[x]] = 2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文