覆盖 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() 两个 的乘积]v1 和 v2 向量 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]])
我想覆盖 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() 两个 的乘积]v1 和 v2 向量 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]])