实现numpy.sin(x)/ x的最佳方法,其中x可能包含0

eph*_*eph 4 python numpy

我现在在做的是:

import numpy as np

eps = np.finfo(float).eps

def sindiv(x):
    x = np.abs(x)
    return np.maximum(eps, np.sin(x)) / np.maximum(eps, x)
Run Code Online (Sandbox Code Playgroud)

但是还有很多额外的阵列操作.有没有更好的办法?

War*_*ser 5

你可以使用numpy.sinc,它计算sin(pi x)/(pi x):

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
Run Code Online (Sandbox Code Playgroud)