Skip to main content
 首页 » 编程设计

python之在 Python(和 Cython)中计算两个矩阵的点积的最快方法是什么

2025年05月04日13langtianya

我正在尝试使用 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