Делает Mathematica, имеют функциональный эквивалент “уникальной” функции Matlab

Есть ли функция Mathematica, которая обеспечивает результаты, эквивалентные unique() функция в MATLAB? Я понимаю, что мог использовать Union[] функция для получения уникальных элементов списка но я хотел бы что-то эквивалентное версии с тремя результатами функции, которая обеспечивает индексные массивы, которые отображаются между входным массивом и массивом уникальных значений.

Если нет ничего, встроил, там реализация той функции, доступной где-нибудь? Кто-то здесь знает, как создать его?

7
задан clartaq 4 February 2010 в 22:31
поделиться

1 ответ

Вы можете легко создать подобную функциональность самостоятельно с помощью 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
8
ответ дан 7 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: