覆盖 numpy.matmul 函数

Override numpy.matmul function

我想覆盖 numpy.matmul() 函数,而不是两个矩阵向量的点积,而是计算有多少元素在这些向量之间逐元素相等两个向量。

示例:

In [1]: import numpy as np

In [2]: m1 = np.matrix([[1, 2], [3, 4]])

In [3]: m2 = np.matrix([[1, 3], [2, 4]])

In [4]: np.matmul(m1, m2)
Out[4]: 
matrix([[ 5, 11],
        [11, 25]])

我想要的不是上面的结果:

In [4]: myfunction(m1, m2)
Out[4]: 
matrix([[2, 0],
        [0, 2]])

[1, 2] 和 [1, 2] 点积 5,但我想要 np.sum([1,2] == [1,2]),即 2。 我的问题是如何更改 np.matmul() 函数 np.dot() 两个 的乘积]v1v2 向量 np.sum(v1 == v2)

In [93]: m1,m2=np.array([[1,2],[3,4]]),np.array([[1,3],[2,4]])
In [94]: np.matmul(m1,m2)
Out[94]: 
array([[ 5, 11],
       [11, 25]])

点积可以用以下公式计算:

In [95]: (m1[:,:,None]*m2[None,:,:]).sum(axis=1)
Out[95]: 
array([[ 5, 11],
       [11, 25]])

这没有 matmul 的速度,因为它没有将任何东西传递给类似 BLAS 的函数,但它仍然相当快,充分利用了 numpy 数组操作。

我想你想要的版本是:

In [96]: (m1[:,:,None]==m2[None,:,:]).sum(axis=1)
Out[96]: 
array([[2, 0],
       [0, 2]])