Как найти пересечение строк двухмерных массивов? - PullRequest
1 голос
/ 02 июля 2019

Я ищу эффективный способ получить по строкам пересечение двух двумерных нудистых ndarrays.В каждом ряду есть только одно пересечение.Например:

[[1, 2], ∩ [[0, 1], -> [1,
 [3, 4]]    [0, 3]]     3]

В лучшем случае следует игнорировать нули:

[[1, 2, 0], ∩ [[0, 1, 0], -> [1,
 [3, 4, 0]]    [0, 3, 0]]     3]

Мое решение:

import numpy as np

arr1 = np.array([[1, 2],
                 [3, 4]])
arr2 = np.array([[0, 1],
                 [0, 3]])
arr3 = np.empty(len(arr1))

for i in range(len(arr1)):
    arr3[i] = np.intersect1d(arr1[i], arr2[i])

print(arr3)
# [ 1.  3.]

У меня около 1 миллиона строк, поэтомувекторизованные операции являются наиболее предпочтительными.Вы можете использовать другие пакеты Python.

1 Ответ

0 голосов
/ 02 июля 2019

Я не знаю элегантного способа сделать это в numpy, но простое понимание списка может помочь:

[list(set.intersection(set(_x),set(_y)).difference({0})) for _x,_y in zip(x,y)]
...