tat*_*ler 14 python arrays numpy apply
所以,我有这个功能 -
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的函数).
谢谢您的帮助!
cs9*_*s95 19
你可以使用np.apply_along_axis:    
np.apply_along_axis(function, 1, array)
第一个参数是函数,第二个参数是要应用函数的轴.在您的情况下,它是第一个轴.当然,最后一个参数是数组.
但是,应该警告你,这apply_along_axis只是一种便利功能,而不是一种魔术弹.它具有严格的速度限制,因为它只是隐藏了一个循环.在可能的情况下,您应该始终尝试对计算进行矢量化.这是我如何做到这一点:
v = array[:, 0] ** 2   # computing just once  
return np.exp((-v / 200) - 0.5 * (array[:, 1] + 0.05 * v - 5) ** 2)
| 归档时间: | 
 | 
| 查看次数: | 21279 次 | 
| 最近记录: |