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

问题描述

我正在尝试创建一个称为函数2的函数,该函数可以对函数进行向量化,当我仅创建一个函数时,该函数就可以工作,但是如果尝试将其包装在另一个函数中,则无法获得所需的结果

代码有效

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>

感谢您的提前帮助

解决方法

这是因为在第二种情况下,您没有调用函数,而只是返回了函数对象。 -bash-4.2$ psql psql (9.6.17) Type "help" for help. postgres=# COPY procedurehistory FROM '/tmp/foo.csv' DELIMITER ',' CSV HEADER; ERROR: unquoted newline found in data HINT: Use quoted CSV field to represent newline. CONTEXT: COPY procedurehistory,line 103: "" postgres=# \q -bash-4.2$ sed -i "s/^M//g" /tmp/P9-ProceduresHistory.csv > /tmp/foo.csv -bash-4.2$ psql psql (9.6.17) Type "help" for help. postgres=# COPY procedurehistory FROM '/tmp/foo.csv' DELIMITER ',' CSV HEADER; COPY 2284 返回函数对象,但不调用它。

将代码更改为-

np.vectorise

现在应该工作。

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

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

  • 在第三种情况下(我的解决方案),您正在调用function3,该函数接受A,B参数并首先对function1进行向量化。接下来,它将使用传递的参数调用此向量化函数,并返回输出。

按照函数调用和函数中的代码顺序行进行操作,这样就会非常清楚为什么会发生这种情况。