Numpy - Применить пользовательскую функцию для всех комбинаций строк в матрице, чтобы получить новую матрицу? - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующая функция, которая применяет ядро ​​пересечения гистограммы для 2 массивов:

def histogram_intersection_kernel(X, Y):

k = np.array([])
for x_i,y_i in zip(X,Y):
    k = np.append(k,np.minimum(x_i,y_i))
return np.sum(k)

Теперь, допустим, у меня есть следующая матрица "mat":

[[1,0,0,2,3],
[2,3,4,0,1],
[3,3,5,0,1]]

Я хотел бы найти эффективный способ получить матрицу, которая является результатом применения "histogram_intersection_kernel" ко всем комбинациям строк в mat. В этом примере это будет:

[[6,2,2],
[6,10,10],
[2,10,12]] 

1 Ответ

0 голосов
/ 24 августа 2018

Расширение размеров до 3D и кредитное плечо broadcasting -

np.minimum(a[:,None,:],a[None,:,:]).sum(axis=2)

Или просто -

np.minimum(a[:,None],a).sum(2)

Пробный прогон -

In [248]: a
Out[248]: 
array([[1, 0, 0, 2, 3],
       [2, 3, 4, 0, 1],
       [3, 3, 5, 0, 1]])

In [249]: np.minimum(a[:,None],a).sum(2)
Out[249]: 
array([[ 6,  2,  2],
       [ 2, 10, 10],
       [ 2, 10, 12]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...