我正在研究一个与计算折射角有关的问题。但是,我似乎不能以度为单位使用numpy.sin()函数。我曾尝试使用numpy.egrees()和numpy.rad2deg()。
numpy.sin(90) numpy.degrees(numpy.sin(90))
两者的回报率分别为~0.894和~51.2.谢谢你的帮助。
zi8p0yeb1#
您不想将度转换为度,因为您已经有了以度为单位的数字(90)。您需要将90度转换为弧度,并且您需要在取正弦之前进行转换:
>>> np.sin(np.deg2rad(90)) 1.0
(您可以使用deg2rad或radians。)
deg2rad
radians
klsxnrf12#
使用标准Python库中的math模块:
math
>>> math.sin(math.radians(90))
fruv7luv3#
您可以定义以下符号以度数为单位工作:
sind = lambda degrees: np.sin(np.deg2rad(degrees)) cosd = lambda degrees: np.cos(np.deg2rad(degrees)) print(sind(90)) # Output 1.0
mzillmmw4#
作为警告,所有这些答案都不适用于非常大的投入。numpy的deg2rad函数简单地将参数乘以pi/180。其源代码是here(在C级别)。该值不精确将导致可怕的错误。例如:
numpy
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例程。
0.766044
cosd
import numpy def cosd(x): return numpy.cos(numpy.deg2rad(numpy.mod(x, 360.0))) print(cosd(1.0E50)) # 0.7660444431189778
一切都很好。
4条答案
按热度按时间zi8p0yeb1#
您不想将度转换为度,因为您已经有了以度为单位的数字(90)。您需要将90度转换为弧度,并且您需要在取正弦之前进行转换:
(您可以使用
deg2rad
或radians
。)klsxnrf12#
使用标准Python库中的
math
模块:fruv7luv3#
您可以定义以下符号以度数为单位工作:
mzillmmw4#
作为警告,所有这些答案都不适用于非常大的投入。
numpy
的deg2rad
函数简单地将参数乘以pi/180。其源代码是here(在C级别)。该值不精确将导致可怕的错误。例如:
让我们在C中使用一些标准库技巧来尝试这一点。
这会打印出
0.766044
,所以当我们的cosd
函数介于-1和1之间时,我们在Python语言中的cosd
函数的偏差约为2!看来
numpy
有mod功能。让我们用它来复制这个C例程。一切都很好。