逐个元素地将列表插入到数组数组的元素中

时间:2016-12-05 21:51:50

标签: python arrays numpy

我有一个数组数组:

parameters = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01]), ...]

其长度为:

print len(parameters)

100       

如果我们将parameters的元素标记为parameters[i][j]

然后可以访问每个号码,即print parameters[1][2]给出0.99

我也有一个数组:

 temperatures = [110.51, 1618.079, ...]

其长度也是100

print len(temperatures)

100       

temperatures的元素为k

我想将k的每个temperatures元素插入到i的每个parameters元素中,以获取final

final = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01, 110.51]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01, 1618.079]), ...]

我试图制作类似zip循环的内容:

for i,j in zip(parameters, valid_temperatures): final = parameters[2][i].append(valid_temperatures[j])

但这不起作用。如果你能帮助我,我将不胜感激。

编辑:基于@hpaulj回答:

如果您运行解决方案1 ​​

 parameters = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01])]
 temperatures = [110.51, 1618.079]

     for i,(arr,t) in enumerate(zip(parameters,temperatures)):
     parameters[i] = np.append(arr,t)

 print parameters

它给出了:

 [array([  2.10000000e-04,  -8.30000000e-03,   9.80000000e-01,
     1.10510000e+02]), array([  5.50000000e-04,   1.20000000e-01,   9.90000000e-01,
     1.61807900e+03])]

这是所需的输出。

此外,解决方案2

parameters = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01])]
temperatures = [110.51, 1618.079]

parameters = [np.append(arr,t) for arr, t in zip(parameters,temperatures)]

print parameters

也会提供所需的输出。

解决方案1 ​​相反,解决方案2 不使用i enumerate索引。因此,如果我只是按以下方式分割解决方案2 [np.append ... for arr ]语法:

 parameters = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01])]
 temperatures = [110.51, 1618.079]

 for arr, t in zip(parameters,temperatures):
   parameters = np.append(arr,t)   

 print parameters

输出仅包含最后一次迭代,而不是“数组格式”:

 [  5.50000000e-04   1.20000000e-01   9.90000000e-01   1.61807900e+03]

通过打印所有迭代,如何才能使其工作? 感谢

1 个答案:

答案 0 :(得分:3)

您有一个数组列表,以及另一个列表或数组:

In [656]: parameters = [np.array([1,2,3]) for _ in range(5)]
In [657]: temps=np.arange(5)

组合它们只是迭代(列表理解可以正常工作),并为每对执行concatenate(数组追加)。

In [659]: [np.concatenate((arr,[t])) for arr, t in zip(parameters, temps)]
Out[659]: 
[array([1, 2, 3, 0]),
 array([1, 2, 3, 1]),
 array([1, 2, 3, 2]),
 array([1, 2, 3, 3]),
 array([1, 2, 3, 4])]

使用append为我们节省了两对[],否则它们是相同的:

 [np.append(arr,t) for arr, t in zip(parameters,temps)]

干净的“就地”版本:

for i,(arr,t) in enumerate(zip(parameters,temps)):
    parameters[i] = np.append(arr,t)

=====

如果子数组的长度相同,则可以将parameters转换为2d数组,并连接temps

In [663]: np.hstack((np.vstack(parameters),temps[:,None]))
Out[663]: 
array([[1, 2, 3, 0],
       [1, 2, 3, 1],
       [1, 2, 3, 2],
       [1, 2, 3, 3],
       [1, 2, 3, 4]])