Python 如何压缩numpy阵列列表?
我有一个numpy阵列的目录:Python 如何压缩numpy阵列列表?,python,python-3.x,list,numpy,dictionary,Python,Python 3.x,List,Numpy,Dictionary,我有一个numpy阵列的目录: {'data1': array([[0.16461831, 0.82400555], [0.02958593, 0.483629 ], [0.51268564, 0.07030046], [0.17027816, 0.35304705]]), 'data2': array([[0.8292598 , 0.78136548], [0.30389913, 0.69250432], [0
{'data1': array([[0.16461831, 0.82400555],
[0.02958593, 0.483629 ],
[0.51268564, 0.07030046],
[0.17027816, 0.35304705]]),
'data2': array([[0.8292598 , 0.78136548],
[0.30389913, 0.69250432],
[0.66608852, 0.42237639],
[0.72678807, 0.40486951]]),
'data3': array([[0.45614633, 0.96677904],
[0.87066105, 0.75826116],
[0.39431988, 0.73041888],
[0.65685809, 0.65498308]])}
预期产出:
[([0.16461831, 0.82400555], [0.8292598 , 0.78136548], [0.45614633, 0.96677904]),
([0.02958593, 0.483629 ], [0.66608852, 0.42237639], [0.87066105, 0.75826116]),
([0.51268564, 0.07030046], [0.66608852, 0.42237639], [0.39431988, 0.73041888]),
([0.17027816, 0.35304705], [0.72678807, 0.40486951], [0.65685809, 0.65498308])]
但当我尝试使用zip时:
list(zip(data.values()))
获取此输出:
[(array([[0.16461831, 0.82400555],
[0.02958593, 0.483629 ],
[0.51268564, 0.07030046],
[0.17027816, 0.35304705]]),),
(array([[0.8292598 , 0.78136548],
[0.30389913, 0.69250432],
[0.66608852, 0.42237639],
[0.72678807, 0.40486951]]),),
(array([[0.45614633, 0.96677904],
[0.87066105, 0.75826116],
[0.39431988, 0.73041888],
[0.65685809, 0.65498308]]),)]
如何压缩numpy阵列列表?使用
列表(zip(*data.values())
输出:
[(array([0.16461831, 0.82400555]),
array([0.8292598 , 0.78136548]),
array([0.45614633, 0.96677904])),
(array([0.02958593, 0.483629 ]),
array([0.30389913, 0.69250432]),
array([0.87066105, 0.75826116])),
(array([0.51268564, 0.07030046]),
array([0.66608852, 0.42237639]),
array([0.39431988, 0.73041888])),
(array([0.17027816, 0.35304705]),
array([0.72678807, 0.40486951]),
array([0.65685809, 0.65498308]))]
如果3D阵列适合您,您可以将其堆叠在第二个轴上(
轴=1
):
以下代码将创建您的输出:
tmp = [data[d].tolist() for d in data]
tmp = list(zip(*tmp))
输出:
[0.828292598,0.78136548;0.4561464633,0.9667677904;0.45614633,0.9667677904;以及[0.0.0.16461614140404040400.16461831.16461831,0.164610.164610.164610.1640.1646158585858585858585858585841410[[0.1640.164414141404040400.0.41414141414141415,0.0.0.0.0.414141404040404040406,0.4565656565656565656565656565656565656565656565332、0.6660852、0.6660858585852、0.6660858585852、0.6660858585852、0.660.6660858585852、0.代码>
链接将以另一种方式解释语法:
[tuple(x) for x in np.stack(data.values(),axis=1).tolist()]
[([0.16461831, 0.82400555], [0.8292598, 0.78136548], [0.45614633, 0.96677904]),
([0.02958593, 0.483629], [0.30389913, 0.69250432], [0.87066105, 0.75826116]),
([0.51268564, 0.07030046], [0.66608852, 0.42237639], [0.39431988, 0.73041888]),
([0.17027816, 0.35304705], [0.72678807, 0.40486951], [0.65685809, 0.65498308])]
@任何东西都可以,一个numpy数组的元组或列表的元组。
[tuple(x) for x in np.stack(data.values(),axis=1).tolist()]
[([0.16461831, 0.82400555], [0.8292598, 0.78136548], [0.45614633, 0.96677904]),
([0.02958593, 0.483629], [0.30389913, 0.69250432], [0.87066105, 0.75826116]),
([0.51268564, 0.07030046], [0.66608852, 0.42237639], [0.39431988, 0.73041888]),
([0.17027816, 0.35304705], [0.72678807, 0.40486951], [0.65685809, 0.65498308])]