当多维形状是列表时,Numba 函数中的 NumPy 零点不起作用
NumPy zeros in Numba function is not working when multi-dimensional shape is a list
我尝试尝试使用 numba,因为有人告诉我它非常适合 numerical/scientific 计算应用程序。但是,在以下情况下,我似乎已经 运行 遇到问题:
我有一个函数可以计算一个 12x12 雅可比矩阵,由一个 numpy 数组表示,然后 returns 这个雅可比矩阵。但是,当我尝试用 @numba.njit
装饰所述函数时,出现以下错误:
This is not usually a problem with Numba itself but instead often caused by
the use of unsupported features or an issue in resolving types.
作为我的用法的一个基本示例,以下代码尝试声明一个 12x12 numpy 零矩阵,但它失败了:
import numpy as np
import numba
@numba.njit
def numpy_matrix_test():
A = np.zeros([12,12])
return A
A_out = numpy_matrix_test()
print(A_out)
因为我假设以这种方式声明 numpy 数组很常见以至于 numba 能够处理它们,所以我很惊讶。
您的意思是 numpy.zeros((12,12)),因为您想要 12 行 12 列的形状?
Numpy Zeros reference
在 numba jitted 函数中调用的函数与未在 numba 函数中使用的函数相同的假设实际上是 错误的 (但可以理解)。实际上,numba(在幕后)委托给它自己的函数,而不是使用 "real" NumPy 函数。
所以在 jitted 函数中调用的并不是真正的 np.zeros
,而是 their own function。所以 Numba 和 NumPy 之间的一些差异是不可避免的。
例如,您不能使用列表作为形状,它必须是 元组(列表和数组会产生您遇到的异常)。所以正确的语法是:
@numba.njit
def numpy_matrix_test():
A = np.zeros((12, 12))
return A
类似的情况适用于 dtype 参数。必须是real NumPy/numba类型,不能使用Python类型:
@numba.njit
def numpy_matrix_test():
A = np.zeros((12, 12), dtype=int) # to make it work use numba.int64 instead of int here
return A
即使 "plain" NumPy 允许:
np.zeros((12, 12), dtype=int)
我尝试尝试使用 numba,因为有人告诉我它非常适合 numerical/scientific 计算应用程序。但是,在以下情况下,我似乎已经 运行 遇到问题:
我有一个函数可以计算一个 12x12 雅可比矩阵,由一个 numpy 数组表示,然后 returns 这个雅可比矩阵。但是,当我尝试用 @numba.njit
装饰所述函数时,出现以下错误:
This is not usually a problem with Numba itself but instead often caused by the use of unsupported features or an issue in resolving types.
作为我的用法的一个基本示例,以下代码尝试声明一个 12x12 numpy 零矩阵,但它失败了:
import numpy as np
import numba
@numba.njit
def numpy_matrix_test():
A = np.zeros([12,12])
return A
A_out = numpy_matrix_test()
print(A_out)
因为我假设以这种方式声明 numpy 数组很常见以至于 numba 能够处理它们,所以我很惊讶。
您的意思是 numpy.zeros((12,12)),因为您想要 12 行 12 列的形状? Numpy Zeros reference
在 numba jitted 函数中调用的函数与未在 numba 函数中使用的函数相同的假设实际上是 错误的 (但可以理解)。实际上,numba(在幕后)委托给它自己的函数,而不是使用 "real" NumPy 函数。
所以在 jitted 函数中调用的并不是真正的 np.zeros
,而是 their own function。所以 Numba 和 NumPy 之间的一些差异是不可避免的。
例如,您不能使用列表作为形状,它必须是 元组(列表和数组会产生您遇到的异常)。所以正确的语法是:
@numba.njit
def numpy_matrix_test():
A = np.zeros((12, 12))
return A
类似的情况适用于 dtype 参数。必须是real NumPy/numba类型,不能使用Python类型:
@numba.njit
def numpy_matrix_test():
A = np.zeros((12, 12), dtype=int) # to make it work use numba.int64 instead of int here
return A
即使 "plain" NumPy 允许:
np.zeros((12, 12), dtype=int)