为什么 guvectorize in numba return 奇怪的输出?
Why do guvectorize in numba return strange output?
例如,我无法理解以下函数的输出:
@nb.guvectorize(["void(float64, float64, float64, float64)"], "(),()->(),()")
def add_subtract(a, b, res1, res2):
res1 = a + b
res2 = a - b
当我调用它时,
add_subtract(np.array([3.0,5.0]), np.array([6.0,7.0]))
奇怪的是,它会显示:
(array([6.95307160e-310, 1.23643049e-311]), array([0., 0.]))
这个函数好像是想return 0。怎么这个函数不return [[9,-3],[12,-2]]?
输出数组未初始化地传递给函数。如果您将新值分配给 res1
和 res2
局部变量,则您将用新数组替换数组。这不会更改传递给函数的数组,这些数组仍未初始化。
相反,您需要替换它们的内容。以下示例有效:
@nb.guvectorize("void(float64[:], float64[:], float64[:], float64[:])",
"(),()->(),()")
def add_subtract(a, b, res1, res2):
res1[:] = a + b
res2[:] = a - b
例如,我无法理解以下函数的输出:
@nb.guvectorize(["void(float64, float64, float64, float64)"], "(),()->(),()")
def add_subtract(a, b, res1, res2):
res1 = a + b
res2 = a - b
当我调用它时,
add_subtract(np.array([3.0,5.0]), np.array([6.0,7.0]))
奇怪的是,它会显示:
(array([6.95307160e-310, 1.23643049e-311]), array([0., 0.]))
这个函数好像是想return 0。怎么这个函数不return [[9,-3],[12,-2]]?
输出数组未初始化地传递给函数。如果您将新值分配给 res1
和 res2
局部变量,则您将用新数组替换数组。这不会更改传递给函数的数组,这些数组仍未初始化。
相反,您需要替换它们的内容。以下示例有效:
@nb.guvectorize("void(float64[:], float64[:], float64[:], float64[:])",
"(),()->(),()")
def add_subtract(a, b, res1, res2):
res1[:] = a + b
res2[:] = a - b