我有一个数组数组:
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]
通过打印所有迭代,如何才能使其工作? 感谢
答案 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]])