使用numpy评估函数

时间:2017-10-24 13:57:16

标签: python arrays numpy

评估函数时返回部分的意义是什么?为什么这有必要?

2 个答案:

答案 0 :(得分:0)

你给出答案。 x[0]-1.0,你希望数组中间的值.np.linspace是构建这一系列值的好函数:

def f1(x):
    g = np.sin(math.pi*np.exp(-x))
    return g

n = 1001 # odd !
x=linspace(-1,1,n) #x[n//2] is 0
f1x=f1(x)
df1=np.diff(f1(x),1)
dx=np.diff(x)

df1dx = - math.pi*np.exp(-x)*np.cos(math.pi*np.exp(-x))[:-1] # to discard last element

# In [3]: np.allclose(df1/dx,df1dx,atol=dx[0])
# Out[3]: True

作为另一个提示,numpy数组在没有循环的情况下更有效和可读地使用。

答案 1 :(得分:0)

您的假设是正确的:dfdx[0]确实是该数组中的第一个值,因此根据您的代码对应于评估x=-1.0处的导数。

要知道x等于0的正确索引,您必须在x数组中查找它。

找到这个的一种方法是,我们找到值为| x-0 |的索引使用argmin

是最小的(所以基本上x = 0但浮动算术需要采取一些预防措施)
index0 = np.argmin(np.abs(x-0))

然后我们得到我们想要的东西,dfdx在x为0的索引处:

print dfdx[index0]

关于浮点算术欺骗的另一种但不太健壮的方法是执行以下操作:

# we make a boolean array that is True where x is zero and False everywhere else
bool_array = (x==0) 
# Numpy alows to use a boolean array as a way to index an array
# Doing so will get you the all the values of dfdx where bool_array is True 
# In our case that will hopefully give us dfdx where x=0
print dfdx[bool_array] 
# same thing as oneliner
print dfdx[x==0]