python - np.sum 的 Numba nopython 错误

标签 python numpy numba

如果我使用这个函数

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]data[j] 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) 的形状,它是 (100,),所以 data[i] 确实是标量,而不是数组。如果您使用 np.random.randn(100,100) 它应该可以工作。看看 docs for randn有关该功能如何工作的更详细说明。

关于python - np.sum 的 Numba nopython 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619855/

相关文章:

python - 值错误: need more than 1 value to unpack how can i fix it

python - 视频中的直方图均衡

python - Django shell 中的奇怪字符,箭头键不起作用

python - 带有列前缀的数据透视表 Pandas

python - 这些代码有什么区别,repr 有什么作用?

arrays - 如何在Python中执行快速切割零边缘?

python - 这是在 DataFrame 中设置值的安全方法吗?为什么这有效?

python - Numba 不加速功能

python - Numba 中 Python 列表的基本问题;这是怎么回事?

python - Numba 中的 bool 签名