我正在尝试使用 Cython 创建一个 Python 库,我需要在其中实现点积。我有一种计算点积的非常简单的方法,但是,对于较大的矩阵,它的运行速度不够快。
我花了很多时间在谷歌上搜索这个问题,并试图让它尽快解决,但我无法让它解决得更快。
下面的代码显示了我当前如何计算它的 Python 实现:
a = [[1, 2, 3], [4, 5, 6]]
b = [[1], [2], [3]]
def dot(a, b):
c = [[0 for j in range(len(b[i]))] for i in range(len(a))]
for i in range(len(c)):
for j in range(len(c[i])):
t = 0
for k in range(len(b)):
t += a[i][k] * b[k][j]
c[i][j] = t
return c
print(dot(a, b))
# [[14], [32]]
这确实给出了正确的计算结果 (python [[14], [32]]
),但是,对于我要使用它的用途而言,计算时间太长。非常感谢任何有关如何使它更快的帮助。谢谢
最佳答案
您可以为此使用 numpy
。 Numpy 实现了 BLAS 规范(基本线性代数子程序),它们是线性代数库的低级例程(如矩阵乘法)的事实标准。要获得两个矩阵的点积,例如 A
和 B
,您可以使用以下代码:
A = [[1, 2, 3], [4, 5, 6]]
B = [[1], [2], [3]]
import numpy as np #Import numpy
numpy_a = np.array(A) #Cast your nested lists to numpy arrays
numpy_b = np.array(B)
print(np.dot(numpy_a, numpy_b)) #Print the result
关于python - 在 Python(和 Cython)中计算两个矩阵的点积的最快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452773/