Numpy 2d set diff - PullRequest
       5

Numpy 2d set diff

0 голосов
/ 27 апреля 2018

В numpy можно сделать разницу между этими двумя массивами:

[[0 0 0 0 1 1 1 1 2 2 2 2]
 [0 1 2 3 0 1 2 3 0 1 2 3]]


[[0 0 0 0 1 1 1 2 2 2]
 [0 1 2 3 0 2 3 0 1 2]]

чтобы получить этот результат

[[1 2]
 [1 3]]

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Это один из способов. Вы также можете использовать numpy.unique для аналогичного решения (проще в v1.13 +, см. Поиск уникальных строк в numpy.array ), но если производительность не является проблемой, вы можете использовать set.

import numpy as np

A = np.array([[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2],
              [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]])

B = np.array([[0, 0, 0, 0, 1, 1, 1, 2, 2, 2],
              [0, 1, 2, 3, 0, 2, 3, 0, 1, 2]])

res = np.array(list(set(map(tuple, A.T)) - set(map(tuple, B.T)))).T

array([[2, 1],
       [3, 1]])
0 голосов
/ 27 апреля 2018

А как же:

a=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]]
b=[[0, 0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 3, 0, 2, 3, 0, 1, 2]]
a = np.array(a).T
b = np.array(b).T
A = [tuple(t) for t in a]
B = [tuple(t) for t in b]
set(A)-set(B)
Out: {(1, 1), (2, 3)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...