有没有什么方法可以像 MATLAB 一样使用简单的语法(即不使用循环)在 Python 中创建一系列数字。例如:
MATLAB:
a = 1:0.5:10
给
a = [1 1.5 2 2.5 3 3.5 .... 9.5 10]
正如其他人指出的那样,
np.arange
让您最接近 Matlab 所习惯的内容。但是,np.arange
排除了终点。您在自己的答案中提出的解决方案可能会导致错误的结果(请参阅我的评论)。
然而,这总是有效的:
start = 0
stop = 3
step = 0.5
a = np.arange(start, stop+step, step)
进一步阅读:特别是如果您是一位经验丰富的 matlab 用户,本指南/备忘单可能会很有趣:链接
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]
import numpy as np
a = np.arange(1, 10, 0.5)
print (a)
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
Python 内置的
xrange
函数可以生成整数,如下所示:
xrange(start, stop, step)
但是
xrange
不能做浮动。