在Octave中如果我想创建一个包含不规则非线性数字的数组(例如12,那么从20到95逐步为5,那么100到190步长为10,然后是200到500 in步骤25)我可以这样做:
octave:1> nxtals = [12, 20:5:95, 100:10:190, 200:25:500]
nxtals =
Columns 1 through 13:
12 20 25 30 35 40 45 50 55 60 65 70 75
Columns 14 through 26:
80 85 90 95 100 110 120 130 140 150 160 170 180
Columns 27 through 39:
190 200 225 250 275 300 325 350 375 400 425 450 475
Column 40:
500
在Numpy / Python3中是否有优雅的Pythonic(也许是NumPythonic)?如果我在Python中执行范围列表,我会收到错误:
>>> q=[12, list(range(20, 50, 5)), list(range(50, 100, 10)),list(range(200,501,25))]
>>> numpy.array(q)
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
numpy.array(q)
ValueError: setting an array element with a sequence.
我怀疑我需要使用像numpy.ravel()
这样的东西,但似乎无法让它发挥作用。
答案 0 :(得分:1)
您可以使用np.hstack
将这些输入列表水平堆叠到单个1D阵列中 -
import numpy as np
q = np.hstack( [[12], list(range(20, 50, 5)), list(range(50, 100, 10)),
list(range(200,501,25)) ] )
示例运行 -
In [295]: q = np.hstack( [[12], list(range(20, 50, 5)), list(range(50, 100, 10)),
...: list(range(200,501,25)) ] )
In [296]: q
Out[296]:
array([ 12, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 200,
225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500])