np.sum 出现 Numba nopython 错误

2024-02-09

如果我使用这个功能

import numpy as np
from numba import jit

@jit(nopython=True)
def diss_matrix(data):
    n = data.shape[0]
    diss = np.empty((n, n))
    for i in range(n):
        for j in range(i):
            dist = np.absolute(data[i] - data[j]).sum()
            diss[i, j] = dist
            diss[j, i] = dist
    return diss

x = np.random.randn(100)
print(diss_matrix(x))

我收到这个错误

numba.errors.UntypedAttributeError: Failed at nopython (nopython frontend)
Unknown attribute 'sum' of type float64
File "test_numba.py", line 11
[1] During: typing of get attribute at 
c:/Users/matte/Dropbox/Università/SDS/Thesis/source/test_numba.py (11)

我一直试图理解这意味着什么。事实是,触发错误的指令如下

dist = np.absolute(data[i] - data[j]).sum()

但我认为问题在于,不知何故,numba假设data[i] and data[j] are float64而不是数组。 事实上,下面的代码

@jit(nopython=True)
def diss_matrix3():
    vec1 = np.array([1, 2, 3])
    vec2 = np.array([2, 3, 4])
    dist = np.absolute(vec1 - vec2).sum()
    return dist

工作完美。

我在用着numba 0.35我正在尝试找到一种方法来使该功能发挥作用。我知道的存在scipy.spatial.distance.pdist,但我需要自己实现。此外,将来也可能会发生同样的错误。

有什么建议么?


如果你看一下形状np.random.randn(100) it is (100,), so data[i]确实是一个标量,而不是一个数组。如果你使用np.random.randn(100,100)它应该有效。看看文档用于randn https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.randn.html有关该功能如何工作的更详细说明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

np.sum 出现 Numba nopython 错误 的相关文章

随机推荐