np.sum 的 Numba nopython 错误
Numba nopython error with np.sum
如果我使用这个功能
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
以获得有关该功能如何工作的更详细说明。
如果我使用这个功能
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
以获得有关该功能如何工作的更详细说明。