Numba - 来自 jitted 函数的参数(numpy 数组)的内存地址
Numba - memory address of argument (numpy array) from inside jitted function
我试图检查 numba
是按值还是按引用传递参数,所以我这样写:
@numba.jit(nopython=True)
def f(x):
return id(x)
当 运行 时,结果是:
TypingError: cannot determine Numba type of <class 'builtin_function_or_method'>
这完全有道理(我知道 id
不一定是内存地址,但这就是我的想法)。然而:
如何在 jitted 函数中获取参数的内存地址?
numba 是按值还是按引用传递参数(我如何验证这一点)?
就 id
的调用而言,您只能使用 python 中列出的功能:
http://numba.pydata.org/numba-doc/latest/reference/pysupported.html
我的理解是 numba 遵循 python 的按引用传递与按值传递的约定(尽管实际上两者都不完全相同)。它更像是按对象调用。像标量这样的不可变对象就像按值传递一样。列表和数组等可变对象的行为类似于引用。
确认这一点的最简单方法就是尝试传入不同参数类型的变量,在函数内修改它们,看看它们在调用函数后是否发生变化。
我试图检查 numba
是按值还是按引用传递参数,所以我这样写:
@numba.jit(nopython=True)
def f(x):
return id(x)
当 运行 时,结果是:
TypingError: cannot determine Numba type of <class 'builtin_function_or_method'>
这完全有道理(我知道 id
不一定是内存地址,但这就是我的想法)。然而:
如何在 jitted 函数中获取参数的内存地址?
numba 是按值还是按引用传递参数(我如何验证这一点)?
就 id
的调用而言,您只能使用 python 中列出的功能:
http://numba.pydata.org/numba-doc/latest/reference/pysupported.html
我的理解是 numba 遵循 python 的按引用传递与按值传递的约定(尽管实际上两者都不完全相同)。它更像是按对象调用。像标量这样的不可变对象就像按值传递一样。列表和数组等可变对象的行为类似于引用。
确认这一点的最简单方法就是尝试传入不同参数类型的变量,在函数内修改它们,看看它们在调用函数后是否发生变化。