我已经对以下使用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无法有效利用这些类型。只需不键入a
和b
即可。
如果您确实需要用Numpy全数组操作修复memoryview操作,那么最简单的解决方案是调用np.asarray
def cell(float[:, ::1] a, float[:, ::1] b):
c = np.asarray(a) @ np.asarray(b)
return c
Cython在这里没有给你带来任何好处——它只是调用了Numpy矩阵乘法代码。因此,只在需要将其与Cython的一些操作相结合的情况下进行。