Numpy уникальные элементы в соответствии с каждым столбцом

#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. Ваши критерии уникальности слишком специализированы. Похоже, что единственный способ — обрабатывать его как список кортежей, как вы это делаете.