Numpy.sin函数以度为单位?

wbrvyc0a  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(152)

我正在研究一个与计算折射角有关的问题。但是,我似乎不能以度为单位使用numpy.sin()函数。我曾尝试使用numpy.egrees()和numpy.rad2deg()。

numpy.sin(90)

numpy.degrees(numpy.sin(90))

两者的回报率分别为~0.894和~51.2.
谢谢你的帮助。

zi8p0yeb

zi8p0yeb1#

您不想将度转换为度,因为您已经有了以度为单位的数字(90)。您需要将90度转换为弧度,并且您需要在取正弦之前进行转换:

>>> np.sin(np.deg2rad(90))
1.0

(您可以使用deg2radradians。)

klsxnrf1

klsxnrf12#

使用标准Python库中的math模块:

>>> math.sin(math.radians(90))
fruv7luv

fruv7luv3#

您可以定义以下符号以度数为单位工作:

sind = lambda degrees: np.sin(np.deg2rad(degrees))
cosd = lambda degrees: np.cos(np.deg2rad(degrees))
print(sind(90)) # Output 1.0
mzillmmw

mzillmmw4#

作为警告,所有这些答案都不适用于非常大的投入。numpydeg2rad函数简单地将参数乘以pi/180。其源代码是here(在C级别)。
该值不精确将导致可怕的错误。例如:

import numpy

def cosd(x):
    return numpy.cos(numpy.deg2rad(x))

print(cosd(1.0E50)) # Prints -0.9999338286702031

让我们在C中使用一些标准库技巧来尝试这一点。


# include <stdio.h>

# include <math.h>

# define cosd(x) cos(fmod((x), 360.0) * M_PI / 180.0)

int main(void)
{
    const double x = 1.0E50;
    printf("%f\n", cosd(x));
    return 0;
}

这会打印出0.766044,所以当我们的cosd函数介于-1和1之间时,我们在Python语言中的cosd函数的偏差约为2!
看来numpy有mod功能。让我们用它来复制这个C例程。

import numpy

def cosd(x):
    return numpy.cos(numpy.deg2rad(numpy.mod(x, 360.0)))

print(cosd(1.0E50)) # 0.7660444431189778

一切都很好。

相关问题