Python-эквивалент уникальной функции в Matlab - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть (654 x 2) матрица целых чисел, где многие строки имеют значения, которые являются просто перестановками одинаковых значений столбца. (Например, определенная строка имеет значения [2,5], тогда как другая строка имеет значения [5,2]). Мне нужна функция Python, которая обрабатывает обе строки как уникальные и помогает мне удалить строку, которая появляется позже при сортировке.

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Сортировка каждого элемента в подсписке.

a = [[1,2], [3, 4], [2,1]]

#Sorted each element in sublist, I converted list to tuple to provide it as an input in set
li = [tuple(sorted(x)) for x in a]
print(li)
#[(1, 2), (3, 4), (1, 2)]

Затем используйте set для устранения дубликатов.

#Convert tuple back to list
unique_li = [list(t) for t in set(li)]
print(unique_li)
#[[1, 2], [3, 4]]
0 голосов
/ 26 апреля 2019

Вы можете использовать numpy для сортировки строк вашего массива.

a = np.array([[1,2], [3, 4], [2,1]])
a
array([[1, 2],
       [3, 4],
       [2, 1]])

np.ndarray.sort(a)
a
array([[1, 2],
       [3, 4],
       [1, 2]])

Использование aray_equal для сравнения на равенство строк:

np.array_equal(a[0], a[1])
False
np.array_equal(a[0], a[2])
True

А затем удалить строки с помощью:

np.delete(a, 2, 0)
array([[1, 2],
       [3, 4]])
...