Matlab的Python范围

Xav*_*-rp 3 python matlab numpy range

我必须将一些Matlab代码翻译成Python 3,我经常遇到表单start:step:stop的范围.当这些参数都是整数时,我很容易用np.arange()来翻译这个命令,但是当一些参数是浮点数时,尤其是step参数,我在Python中得不到相同的输出.例如,

7:8 %In Matlab
7 8
Run Code Online (Sandbox Code Playgroud)

如果我想在Python中翻译它,我只需使用:

np.arange(7,8+1)
array([7, 8])
Run Code Online (Sandbox Code Playgroud)

但如果我有,让我们说:

7:0.3:8 %In Matlab
7.0000    7.3000    7.6000    7.9000
Run Code Online (Sandbox Code Playgroud)

我无法使用相同的逻辑翻译它:

np.arange(7, 8+0.3, 0.3)
array([ 7. ,  7.3,  7.6,  7.9,  8.2])
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不能将步骤添加到stop参数.

但是,如果我有:

7:0.2:8 %In Matlab
7.0000    7.2000    7.4000    7.6000    7.8000    8.0000
Run Code Online (Sandbox Code Playgroud)

我可以用我的第一个想法:

np.arange(7,8+0.2,0.2)
array([ 7. ,  7.2,  7.4,  7.6,  7.8,  8. ])
Run Code Online (Sandbox Code Playgroud)

我的问题来自于我没有翻译像这样的硬编码线.实际上,这些范围的每个参数都可以根据我正在处理的函数的输入而改变.因此,我有时可以将0.2或0.3作为步长参数.所以基本上,你们知道是否有另一个numpy/scipy或者其他任何真正像Matlab系列一样的函数,或者我必须自己添加一些代码来确保我的Python范围最终与Matlab的?

谢谢!

Dan*_*Dan 7

实际上,您并不需要将整个步长添加到最大限制,np.arange但只需要一个非常小的数字,以确保包含最大值.例如机器epsilon:

eps = np.finfo(np.float32).eps
Run Code Online (Sandbox Code Playgroud)

添加eps将给出与MATLAB在所有三种场景中所做的相同的结果:

In [13]: np.arange(7, 8+eps)
Out[13]: array([ 7.,  8.])

In [14]: np.arange(7, 8+eps, 0.3)
Out[14]: array([ 7. ,  7.3,  7.6,  7.9])

In [15]: np.arange(7, 8+eps, 0.2)
Out[15]: array([ 7. ,  7.2,  7.4,  7.6,  7.8,  8. ])
Run Code Online (Sandbox Code Playgroud)