gpt4 book ai didi

python - 如何正确定义以 numpy 数组作为参数和返回类型的函数?

转载 作者:行者123 更新时间:2023-12-01 00:02:34 25 4
gpt4 key购买 nike

据我所知,有两个选项。(这里 numpy 导入为 np)

<强>1。使用 lambda 表达式

当我们处理简单的函数时可以使用它。假设我想实现函数 f:(x,y) = (x^2, x+y)。然后我希望像这样的工作:

f = lambda x,y : x**2, x + y

f = lambda x,y : (x**2, x + y)

当我调用 print(f(np.array([[1],[3]],float)))print(f(np.array([1, 3], float )))。但我无法让这些 lambda 表达式的任何变体起作用。

<强>2。定义“适当的”函数

但是,这确实有效:

def f(vec):
return np.array([vec[0] ** 2, vec[0] + vec[1]])

但是语法是最优的吗?如果我不希望上述“正确”函数被矢量化,我该怎么做。总的来说,我如何定义一个采用 numpy 数组值的 numpy 数组值函数?

最佳答案

无论使用 lambda 还是 def,或者使用本地定义的变量进行计算,这并不重要。如果使用函数,输入参数的数量必须与定义匹配。

但是让我们用简单的交互式示例来演示

定义两个变量:

In [121]: x, y = 1,3                                                                           
In [122]: x**2, x+y
Out[122]: (1, 4) # returns a tuple

定义列表:

In [125]: vec = [1,3]                                                                          
In [126]: vec[0]**2, vec[0]+vec[1]
Out[126]: (1, 4) # same tuple

或数组:

In [127]: arr = np.array([1,3])                                                                

[126] 也可以使用此方法,但索引数组速度较慢。

当我们处理整个数组而不仅仅是元素时,数组是最好的。例如,我们可以对数组的所有项求平方,或者对它们求和。

In [128]: arr**2, arr.sum()                                                                    
Out[128]: (array([1, 9]), 4)

这些计算适用于任何大小的数组,而不仅仅是形状 (2,)。

以上任何元组都可以转换为数组:

In [133]: np.array([x**2, x+y])                                                                
Out[133]: array([1, 4])

关于python - 如何正确定义以 numpy 数组作为参数和返回类型的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60237939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com