我正在为一个项目将MATLAB程序转换为Python。我正面临着将MATLAB的sind()
语法转换为Python的一些主要问题。我正在使用
numpy.sin(numpy.radians())
但是,与Matlab
相比,Python中的一些结果显示出巨大的变化。有没有更简单的方法来告诉Python度数而不是弧度?
答案 0 :(得分:1)
在Octave中,sind
是:
function y = sind (x)
...
I = x / 180;
y = sin (I .* pi);
y(I == fix (I) & isfinite (I)) = 0;
endfunction
根据记录np.radians
, np.deg2rad
(x * pi / 180
)。
因此,大多数值np.sin(np.radians(x))
应与sind(x)
相同。浮点精度的极限可能会有一些变化。此外,我不确定最后一行应该做什么。
In [327]: np.sin(np.radians(0))
Out[327]: 0.0
In [328]: np.sin(np.radians(90))
Out[328]: 1.0
In [329]: np.sin(np.radians(180))
Out[329]: 1.2246467991473532e-16
>> sind(0)
ans = 0
>> sind(90)
ans = 1
>> sind(180)
ans = 0
Octave文档添加:Returns zero for elements where 'X/180' is an integer.
所以是的,可能存在差异,但1e-16并不是一个巨大的差异。
我可以复制sind
:
def sind(x):
I = x/180.
y = np.sin(I * np.pi)
mask = (I == np.trunc(I)) & np.isfinite(I)
y[mask] = 0
return y
In [356]: x=np.array([0,90,180,359,360])
In [357]: np.sin(np.radians(x))
Out[357]:
array([ 0.00000000e+00, 1.00000000e+00, 1.22464680e-16,
-1.74524064e-02, -2.44929360e-16])
In [358]: sind(x)
Out[358]: array([ 0. , 1. , 0. , -0.01745241, 0. ])
>> x=[0,90,180,359, 360]
x =
0 90 180 359 360
>> sind(x)
ans =
0.00000 1.00000 0.00000 -0.01745 0.00000