#python #numpy
#python #numpy
Вопрос:
Я ищу способ уменьшить Nx2
матрицу numpy до матрицы меньшего размера, где каждое число встречается в каждом столбце только один раз.
Например:
A = np.array([[2, 0],
[1, 0],
[0, 1],
[1, 1],
[1, 3],
[1, 2]])
# Would be output as
[[2, 0],
[0, 1],
[1, 3]]
Порядок должен поддерживаться (первый случай, когда встречается каждое число, должен быть тем, который используется).
Реализация python для этого:
output = []
x_occurances = set()
y_occurances = set()
for x, y in A:
if x not in x_occurances and y not in y_occurances:
output.append([x, y])
x_occurances.add(x)
y_occurances.add(y)
Но я хотел бы знать, существует ли более ориентированное на numpy решение. Я рассматривал np.unique()
однако случаи, которые я нахожу, похоже, работают только над уникальными строками или столбцами.
Комментарии:
1. Разве ваш вывод не должен содержать 2 во втором столбце?
2. @shivsn Я бы сказал, нет, потому что строка сохраняется, только если оба числа в ней еще не были выведены в их соответствующем столбце, поэтому, когда вы достигнете,
[1,2]
вывод уже содержит[2, 0],[0, 1] and [1, 3]
, поэтому в столбце 0 уже есть 1, следовательно, строка отклоняется.3. @jadsq да, это правильно.
4. Ваши критерии уникальности слишком специализированы. Похоже, что единственный способ — обрабатывать его как список кортежей, как вы это делаете.