生成具有不同范围的嵌套列表

时间:2018-07-19 01:27:40

标签: python python-3.x numpy

生成许多列表,每个列表具有不同的范围

Isc_act = [0.1, 0.2, 0.3]
I_cel = []
a = []
for i in range(0,len(Isc_act)):
    a = np.arange(0, Isc_act[i], 0.1*Isc_act[i])
    I_cel[i].append(a)
print(I_cel)

输出为:

IndexError: list index out of range

我的代码给出了错误。但是,我想得到I_cel = [[0,0.01,..,0.1],[0,0.02,0.04,...,0.2],[0, 0.03, 0.06,...,0.3]]。因此,“嵌套列表” I_cel具有三个列表,每个列表具有10个值。

2 个答案:

答案 0 :(得分:1)

最简单的代码修复,可能是您打算做的事情:

Isc_act = [0.1, 0.2, 0.3]
I_cel = []
for i in range(0,len(Isc_act)):
    a = np.arange(0, Isc_act[i], 0.1*Isc_act[i])
    I_cel.append(a)
print(I_cel)

请注意,端点将比您想要的少一步!例如,零行,您必须选择以下两个:

  • 0.01步长
  • 起点0.0和终点0.1
  • 总共10个元素

您不能同时拥有全部三个。

更多numpythonic方法:

>>> Isc_act = [0.1, 0.2, 0.3]
>>> (np.linspace(0, 1, 11).reshape(11,1) @ [Isc_act]).T
array([[0.  , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1 ],
       [0.  , 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ],
       [0.  , 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27, 0.3 ]])

答案 1 :(得分:1)

linspace在处理浮点数时可以更好地控制终点:

In [84]: [np.linspace(0,x,11) for x in [.1,.2,.3]]
Out[84]: 
[array([0.  , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1 ]),
 array([0.  , 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ]),
 array([0.  , 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.27, 0.3 ])]

或者我们可以仅缩放一个数组(可以预测整数的arange):

In [86]: np.array([.1,.2,.3])[:,None]*np.arange(0,11)
Out[86]: 
array([[0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ],
       [0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ],
       [0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8, 2.1, 2.4, 2.7, 3. ]])