Numpy:实现成对分钟操作总和的有效方法

时间:2017-11-15 13:48:03

标签: numpy matrix scipy

很容易在两个矩阵之间进行乘积,即:

A = np.random.randn(100, 64)
B = np.random.randn(64, 100)
G = np.dot(A, B)

是否有类似的方法在矢量之间进行成对分钟的总和?

效率低下的方法是:

# For each row, col vector i,j in A and B respectively
for i in range(A.shape[0]):
    for j in range(B.shape[1]):
        G[i, j] = np.minimum(A[i], B[:,j]).sum()

所以我正在寻找类似的东西:

G = np.dot(A, B, operation=np.minimum)

目标是避免循环缓慢并利用numpy的BLAS实现。

一个主要用例是直方图内核的交集。这个伟大的博客文章中描述了一个例子: http://blog.datadive.net/histogram-intersection-for-change-detection/

1 个答案:

答案 0 :(得分:2)

一种直截了当的方法是将A扩展为3D并利用broadcasting -

np.minimum(A[...,None], B).sum(1)