In [20]: x = 2.4
In [21]: np.sin(x)/x
Out[21]: 0.28144299189631289
In [22]: x_over_pi = x / np.pi
In [23]: np.sinc(x_over_pi)
Out[23]: 0.28144299189631289
In [24]: np.sinc(0)
Out[24]: 1.0
def sindiv(x):
sox = np.zeros(x.size)
for i in xrange(x.size):
xv = x[i]
if np.abs(xv) < 0.001: # For testing, use a small multiple of machine epsilon
sox[i] = 1.0 - xv * xv / 6.0
else:
sox[i] = np.sin(xv) / xv
return sox
您可以使用^{} ,它计算sin(pix)/(pix):
在numpy数组表示法中(因此您得到一个np数组):
在这里,我把“epsilon”做了相当大的测试,并用泰勒级数的前两项来近似。实际上,我将0.01改为
^{pr2}$eps
(机器epsilon)的某个小倍数。在输出
numpy.ndarray
,并且值在原点附近是连续的(如果重要的话,可以微分)。在如果你不想要双重求值(也就是说,两个分支都是在上面计算的),那么我认为你必须使用一个循环,因为我不认为存在任何“lazy where”选项。在
为了使这真的是python,最好检查
x
的类型,如果不是数组,则只执行非数组版本。在允许div为零,然后替换NaNs怎么样?在
如果不需要警告,请通过
seterr
来取消警告当然,可以不使用
^{pr2}$a
:相关问题 更多 >
编程相关推荐