为什么在此Numba函数中未使用此变量?

问题描述

我正在尝试使用Numba加速我的代码。我的代码使用了大量的numpy数组矩阵乘法,因此我想创建一个jit版本。我知道jit希望将其变量预先分配,所以我的功能是这样的:

@njit(parallel = True)
def jdot(a,b):
    c = np.zeros((a.shape[0],b.shape[1]))
    c = a.dot(b)
    return c

但是我的IDE告诉我c的第一个实例尚未使用。我这是怎么了?

编辑: 要添加一些信息:如果我删除了上面版本中的多余行并进行了速度测试,则得到的jit版本比普通版本差。这表明我绝对不能正确使用Numba,并且我怀疑正确地预分配c可能是解决方案-但就像我说的那样,我不确定如何。这是速度测试代码

@jit(nopython = True,parallel = True)
def jdot(a,b):
    c = np.dot(a,b)
    return c

jdot(np.ones((4,5,)),np.ones((5,6))) #Compile ahead of test

t1 = timer()
testrange = 10^6
for i in range(testrange):
    a = np.random.randn(4,5)
    b = np.random.randn(5,6)
    jdot(a,b)
t2 = timer()
for i in range(testrange):
    a = np.random.randn(4,6)
    a.dot(b)
t3 = timer()
Tratio = (t2-t1)/(t3-t2)
print(f"Timing Ratio is {Tratio}")

哪个产生Timing Ratio is 1.9013561547738118

该怎么办?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)