Cython:矩阵乘法



我已经对以下使用numpy矩阵乘法的文件进行了Cython化:

def cell(float[:, ::1] a, float[:, ::1] b):
c = a @ b
return c

然而,当我用来称呼它时

from matmul import cell
import numpy as np

a = np.zeros((1, 64), dtype=np.float32)
b = np.zeros((64, 64), dtype=np.float32)
c = cell(a, b)

我得到以下错误:

TypeError:@:_memoryviewslice和的操作数类型不受支持_内存视图切片

如何使用Cython执行矩阵乘法?

上下文:函数";单元格";是我编写的通过LSTM网络执行预测的代码的一部分(我手动编写,没有使用PyTorch或Tensorflow,只有NumPy(。我需要加快代码的速度,以便能够实时使用网络。

如果这就是你所要做的全部,那么为cell的参数添加类型实际上没有意义——你所做的只是无端添加昂贵的类型检查。Cython无法有效利用这些类型。只需不键入ab即可。

如果您确实需要用Numpy全数组操作修复memoryview操作,那么最简单的解决方案是调用np.asarray

def cell(float[:, ::1] a, float[:, ::1] b):
c = np.asarray(a) @ np.asarray(b)
return c

Cython在这里没有给你带来任何好处——它只是调用了Numpy矩阵乘法代码。因此,只在需要将其与Cython的一些操作相结合的情况下进行。

相关内容

  • 没有找到相关文章

最新更新