gpt4 book ai didi

python - 在 NumPy 数组的每一行(按行)应用函数

转载 作者:太空狗 更新时间:2023-10-29 18:20:52 24 4
gpt4 key购买 nike

所以,我有这个功能 -

def function(x):
x , y = vector
return exp(((-x**2/200))-0.5*(y+0.05*(x**2) - 100*0.05)**2)

假设我想在以下几点对其进行评估(第一列是 x 值,第二列是 y 值)-

array([[-1.56113514,  4.51759732],
[-2.80261623, 5.068371 ],
[ 0.7792729 , 6.0169462 ],
[-1.35672858, 3.52517478],
[-1.92074891, 5.79966161],
[-2.79340321, 4.73430001],
[-2.79655868, 5.05361163],
[-2.13637747, 5.39255837],
[ 0.17341809, 3.60918261],
[-1.22712921, 4.95327158]])

即我想将第一行值传递给函数并求值,然后是第二行并求值等等,然后最终结果将是在这些点求值的数组(因此,一个包含 10 个值的数组)。

例如,如果函数是双变量正态分布 -

def function2(x):

function2 = (mvnorm.pdf(x,[0,0],[[1,0],[0,1]]))

return function2

然后我将上述值传递给这个函数,我会得到 -

array([  1.17738907e-05,   1.08383957e-04,   1.69855078e-04,
5.64757613e-06, 1.37432346e-05, 1.44032800e-04,
1.33426313e-05, 1.97822328e-06, 6.56121709e-08,
4.67076770e-05])

基本上,我正在寻找一种方法来重写该函数,以便它可以执行此操作。此外,我想将该函数保留为仅一个变量的函数(即仅 x 的函数)。

感谢您的帮助!

最佳答案

您可以使用 np.apply_along_axis :

np.apply_along_axis(function, 1, array)

第一个参数是函数,第二个参数是应用函数的轴。在您的情况下,它是第一个轴。当然,最后一个参数是数组。


然而,您应该被警告,apply_along_axis 只是一个方便的功能,而不是 Elixir 。它有严格的速度限制,因为它只是隐藏了一个循环。在可能的情况下,您应该始终尝试矢量化您的计算。以下是我将如何执行此操作:

v = array[:, 0] ** 2   # computing just once  
return np.exp((-v / 200) - 0.5 * (array[:, 1] + 0.05 * v - 5) ** 2)

关于python - 在 NumPy 数组的每一行(按行)应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45604688/

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