我有以下一些matlab代码:
f=@(h)(exp(-2*mun*(h/sigma+1.166))-1+2*mun*(h/sigma+1.166))/(2*mun^2)-ARL0;
参数并不重要,它们在这一点上都只是常量。重要的是,现在我可以通过调用f(h)来评估该函数的任何h值。特别是,我可以在我指定的任何时间间隔内找到函数的零,最小值,最大值等。
我正在将这段代码翻译成python,主要是作为学习python的练习,我想知道是否有类似的东西(可能是numpy)我可以使用,而不是设置一个任意组的numpy数组h要处理的值。
我可以做类似(伪代码)的事情:
f = numpy.array(that function for h in numpy.arange(hmin, hmax,hstep))
但是这会让我变成一个步长。有没有办法避免这种情况并获得像matlab一样的完全精度?
编辑:在一天结束时我真正想要的是找到函数f的零,最大和最小位置(不是值)。看起来scipy可能有一些在这里更有用的功能:http://docs.scipy.org/doc/scipy/reference/optimize.html
答案 0 :(得分:1)
如果您只是寻找x的整数值的f值,则以下内容将起作用:
f = [your_function(x) for x in xrange(hmin, hmax)]
如果您想要比整数值更精细的粒度,您可以这样做:
f = [your_function(x) for x in xrange(hmin, hmax, hstep)]
如果您需要对零,最大和最小位置的精确解决方案,我同意您的修改:使用scipy optimize。
有关scipy优化功能的两个重要说明:
答案 1 :(得分:1)
Python
中的MATLAB
等效函数句柄(@
表示法)被称为" lambda函数"在python中。等效语法如下:
Matlab的:
func = @(h)(h+2):
的Python:
func = lambda h: h+2
对于您的具体情况,您将实现相应的matlab函数,如下所示:
import numpy as np
f = lambda h: (np.exp(-2*mun*(h/sigma+1.166))-1+2*mun*(h/sigma+1.166))/(2*mun**2)-ARL0
然后可以将 f
用作函数并直接应用于任何numpy
数组。所以这可行,例如:
rarr = np.random.random((100, 20))
frarr = f(rarr)