如何像在 MATLAB 中一样在 Python 中创建数字范围

问题描述 投票:0回答:5

有没有什么方法可以像 MATLAB 一样使用简单的语法(即不使用循环)在 Python 中创建一系列数字。例如:

MATLAB:

a = 1:0.5:10
a = [1 1.5 2 2.5 3 3.5 .... 9.5 10]

python matlab range
5个回答
9
投票

正如其他人指出的那样,

np.arange
让您最接近 Matlab 所习惯的内容。但是,
np.arange
排除了终点。您在自己的答案中提出的解决方案可能会导致错误的结果(请参阅我的评论)。

然而,这总是有效的:

start = 0
stop = 3
step = 0.5
a = np.arange(start, stop+step, step)

进一步阅读:特别是如果您是一位经验丰富的 matlab 用户,本指南/备忘单可能会很有趣:链接


6
投票

Numpy 有

arange
r_
,看起来像这样:

import numpy as np
print(np.arange(1, 3, .5))
# [ 1.   1.5  2.   2.5]
print(np.r_[1:3:.5])
# [ 1.   1.5  2.   2.5]

请注意,它与 matlab 略有不同,首先,与 matlab 相比,numpy 中停止和步骤的顺序相反,其次,结果中不包含停止。您也可以考虑使用

linspace
当您使用浮点数时,它通常比
arange
更受欢迎,因为
num
可以比
step
更精确地定义:

print(np.linspace(1, 3, num=5))
# [ 1.   1.5  2.   2.5  3. ]

print(np.linspace(1, 3, num=4, endpoint=False))
# [ 1.   1.5  2.   2.5]

2
投票
import numpy as np
a = np.arange(1, 10, 0.5)
print (a)

1
投票
a = np.arange(start, stop+step, step)

并不适用于所有情况!

我解释一下:

Octave (Matlab) 版本给出了这种情况的 9 个值:

clc
start=0
stop=1.2
step=1/7
a = start : step : stop
length(a)

它给出:

start = 0
stop = 1.2000
step = 0.1429
a =

 Columns 1 through 8:

         0    0.1429    0.2857    0.4286    0.5714    0.7143    0.8571    1.0000

 Column 9:

    1.1429

ans = 9

它给出了 9 个值。

这个Python版本给出了10个值:

start = 0
stop = 1.2
step = 1 / 7
print("step", step)
a = np.arange(start, stop + step, step)
print(a)
print(a.size)

给予

step 0.14285714285714285
[0.         0.14285714 0.28571429 0.42857143 0.57142857 0.71428571
 0.85714286 1.         1.14285714 1.28571429]
10

(注意 1.28571429 > 1.2)

解决方案:

def arange_like_matlab_or_octave(a, b, srate):
    k = []
    i = 0
    dt = 1 / srate
    t = a + i * dt
    while t <= b:
        k.append(t)
        i += 1
        t = a + i * dt
    return np.array(k)

这样:

a = arange_like_matlab_or_octave(start, stop, 1 / step)

它给出了一个 numpy 数组,如

np.arange
:

[0.         0.14285714 0.28571429 0.42857143 0.57142857 0.71428571
 0.85714286 1.         1.14285714]
9

0
投票

Python 内置的

xrange
函数可以生成整数,如下所示:

xrange(start, stop, step)

但是

xrange
不能做浮动。

© www.soinside.com 2019 - 2024. All rights reserved.