在函数内使用 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 输出调用此矢量化函数。
按照函数调用和函数中的连续代码行进行操作,就会非常清楚为什么会这样。
我正在尝试创建一个名为 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 输出调用此矢量化函数。
按照函数调用和函数中的连续代码行进行操作,就会非常清楚为什么会这样。