【问题标题】:Numba nopython error with np.sumnp.sum 的 Numba nopython 错误
【发布时间】:2018-03-19 02:14:28
【问题描述】:

如果我使用这个功能

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 的存在,但我需要自己实现。此外,将来可能会发生同样的错误。

有什么建议吗?

【问题讨论】:

    标签: python numpy numba


    【解决方案1】:

    如果你看np.random.randn(100) 的形状,它是(100,),所以data[i] 确实是一个标量,而不是一个数组。如果您使用np.random.randn(100,100),它应该可以工作。查看docs for randn 以获得有关该功能如何工作的更详细说明。

    【讨论】:

    • 谢谢!我很绝望,没有检查这样一个基本的东西。误导我的是它用nopython=False编译的事实。
    猜你喜欢
    • 2016-12-10
    • 2020-08-08
    • 2017-06-21
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2021-06-15
    • 2017-08-08
    相关资源
    最近更新 更多