在函数内使用 np.vectorize 时出错

Error using np.vectorize inside a function

我正在尝试创建一个名为 function2 的函数来向量化一个函数,当我只创建一个函数时它可以工作,但是如果尝试将它包装在另一个函数中我得不到我需要的结果

此代码有效

A= np.array([1])
B= np.array([2])

def function1(a, b):
    if a > b:
        return a - b
    else:
        return a + b
function1 = np.vectorize(function1)

function1(A, B)

out array([3])

但是这个没有,我不知道为什么,我希望得到与上面代码相​​同的结果 array([3])

def function1(a, b):
    if a > b:
        return a - b
    else:
        return a + b

def function2(a, b):
    function2 = np.vectorize(function1)
    return function2

function2(A, B)

out <numpy.vectorize at 0x24f0a22eba8>

提前感谢您的帮助

那是因为在第二种情况下你没有调用你只是返回函数对象的函数。 np.vectorise returns 函数对象但没有调用它。

将您的代码更改为 -


def function3(a, b):
    function2 = np.vectorize(function1)
    return function2(a,b) #call here

function3(A,B)

现在应该可以工作了。

  • 在第一种情况下,function2 是向量化函数对象本身,将 (A,B) 参数传递给它会调用它。

  • 在第二种情况下,function2 是一个参数函数,但它不是使用参数 a,b,而是简单的 returns 一个函数对象。因此,当您使用参数调用它时,它每次都会覆盖 function2 和 returns 一个矢量化函数对象,完全忽略所有参数。

  • 在第三种情况(我的解决方案)中,您正在调用 function3,它采用 A、B 参数并首先向量化 function1。接下来,它使用传递的参数和 returns 输出调用此矢量化函数。

按照函数调用和函数中的连续代码行进行操作,就会非常清楚为什么会这样。