Numpy对矩阵中的所有行组合应用自定义函数以获得新矩阵?

2024-04-25 12:32:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下函数,它为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]]

我想找到一种有效的方法来得到矩阵,它是对mat中所有行的组合应用“直方图交叉核”的结果。在这个例子中,它将是:

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

Tags: 函数infordefnp矩阵数组zip
1条回答
网友
1楼 · 发布于 2024-04-25 12:32:45

将维度扩展到3D并利用^{}-

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]])

相关问题 更多 >