我有以下数据
a= [1 1.1 1.2 1.3 1.4 1.5]
我想要做的是这个数据的每个值产生一系列增量的点,间隔为10%。创建一个新数组:
b= [[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0], [0 0.11 ... 1.1],.....]
我要做的下一件事是从列表1中取出每个数字并确定另一个值的增量数(20%间距),例如2,获取另一个数组:
c=[[1 1.2 1.4. 1.6 1.8 2.0], [1.1 ..... 2.0],......]
然后我想组合这些数组:
d =[[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1 1.2 1.4. 1.6 1.8 2.0], [0 0.11 ... 2.0],.....]
列表1是从一个等式确定的,但我想进一步计算到某一点,在这种情况下值为2.
有什么东西可以工作或者其他方式生成一系列数字吗?这甚至可能吗?
答案 0 :(得分:1)
混合列表推导和np.linspace
非常简单:
>>> a = [1, 1.1, 1.2, 1.3, 1.4, 1.5]
>>> b = [np.linspace(0, j, 11) for j in a]
>>> b
[array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),
array([ 0. , 0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 0.99,
1.1 ]),
...
array([ 0. , 0.15, 0.3 , 0.45, 0.6 , 0.75, 0.9 , 1.05, 1.2 , 1.35,
1.5 ])]
>>> c = [np.linspace(j, 2, 6) for j in a]
>>> c
[array([ 1. , 1.2, 1.4, 1.6, 1.8, 2. ]),
array([ 1.1 , 1.28, 1.46, 1.64, 1.82, 2. ]),
...
array([ 1.5, 1.6, 1.7, 1.8, 1.9, 2. ])]
要连接它们,您必须删除c
中每个数组的第一个元素或b
中每个数组的最后一个元素。如果您只需要连接,我建议保持c
如上所述,然后执行:
>>> b = [np.linspace(0, j, 10, endpoint=False) for j in a]
>>> d = map(np.concatenate, zip(b, c))
>>> d
[array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,
1.2, 1.4, 1.6, 1.8, 2. ]),
array([ 0. , 0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88,
0.99, 1.1 , 1.28, 1.46, 1.64, 1.82, 2. ]),
...
array([ 0. , 0.15, 0.3 , 0.45, 0.6 , 0.75, 0.9 , 1.05, 1.2 ,
1.35, 1.5 , 1.6 , 1.7 , 1.8 , 1.9 , 2. ])]
如果你想要列表而不是numpy数组,你总是可以做最后的
>>> d = map(list, d)