我正在尝试向量化标量函数

I am trying to vectorize the scalar function

这是我写的代码

def scalar_function(x, y):
    """
    Returns the f(x,y) defined in the problem statement.
    """
    if x<=y:
       return (np.dot(x,y))
    else:
       return(x/y)

def vector_function(x, y):
    """
    Make sure vector_function can deal with vector input x,y 
    """
    vfunc = np.vectorize(scalar_function(x,y))
    return vfunc

我正在尝试做 as::scalar_function 只能处理标量输入,我们可以使用函数 np.vectorize() 将其转换为向量化函数。注意 np.vectorize() 的输入参数应该是一个标量函数,而 np.vectorize() 的输出是一个可以处理向量输入的新函数。

但是在 运行 之后我得到了一个错误

TypeError: unsupported operand type(s) for -: 'float' and 'vectorize'

现在不知道怎么办

NumPy as np

已经导入 谢谢

您可以为 vector_function 添加额外的论点,如下所示:

def vector_function(x, y , func):
    
    vfunc = np.vectorize(func)   
    return vfunc(x,y) 

这是你的做法:

vector_function = np.vectorize(scalar_function)

现在我的问题是你为什么要那样做。我敢打赌,如果您使用 numpy 函数而不是对其进行矢量化,事情会 运行 更快。

您只需要在 return

中将参数传递给 vfunc
def vector_function(x, y , func):
    
    vfunc = np.vectorize(func)   
    return vfunc(x,y) 

使用这个

def vector_function(x, y):
    """
    Make sure vector_function can deal with vector input x,y 
    """
    vector_function = np.vectorize(scalar_function)
    return vector_function(x,y)