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

标签 python cython matrix-multiplication

我正在尝试使用 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 规范(基本线性代数子程序),它们是线性代数库的低级例程(如矩阵乘法)的事实标准。要获得两个矩阵的点积,例如 AB,您可以使用以下代码:

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/

相关文章:

python - Cython、numpy 加速

r - 在时间 t-1 处将列表中的矩阵按顺序乘以向量(递归地)

C++ - Kazushige Goto 论文中的优化矩阵乘法在 O3 标志中的表现比 naive 差

machine-learning - Matmul 输入和权重矩阵顺序?

python - 调整大小后 QRubberBand 在 QGraphicsView 上移动

python - 如何从Python MySQL数据库中获取数据到文本框中?

Python if 语句,无法连接 'str' 和 'instance' 对象

Python模拟日志记录同时保留日志输出

cython - 如何从 C 访问 asyncio/uvloop 循环

python - Pycharm 无法识别位于路径中的 Cython 模块