Python 从多维列表中获取列
我有一个非常复杂的嵌套列表:每个元素是一个包含两个元素的元组:一个是对象,另一个是3x2xn数组。这是一个玩具模型Python 从多维列表中获取列,python,multidimensional-array,Python,Multidimensional Array,我有一个非常复杂的嵌套列表:每个元素是一个包含两个元素的元组:一个是对象,另一个是3x2xn数组。这是一个玩具模型 toy=[('mol1',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]])),('mol2',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]]))] 我怎样才能从中得到一列呢 我在找 ('mol1', 'mol2') 对于2D阵列,如: array([[1,1,1],[1,1,1],[1,1,1],
toy=[('mol1',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]])),('mol2',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]]))]
我怎样才能从中得到一列呢
我在找
('mol1', 'mol2')
对于2D阵列,如:
array([[1,1,1],[1,1,1],[1,1,1],[1,1,1]])
我有一个解决方案,但我认为它效率很低:
zip(*toy)[0]
>>> tuple(t[0] for t in toy)
('mol1', 'mol2')
它回来了
('mol1', 'mol2')
然后
返回
array([[1, 1, 1],
[1, 1, 1]])
像那样的自行车
for i in range(len(toy)):
zip(*toy)[1][i][:,0]
提供列的所有元素,我可以使用vstack构建它,这应该是相当有效的:
zip(*toy)[0]
>>> tuple(t[0] for t in toy)
('mol1', 'mol2')
对于2D阵列,借助numpy的vstack函数:
>>> from numpy import vstack
>>> vstack([t[1][:, 0] for t in toy])
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
您可以使用numpy中的数组来存储数据或将数据转换为数据,然后使用内置的列切片功能。通常,numpy切片速度非常快
import numpy as np
np.asarray(toy)[::, 0] # first column
# output
array(['mol1', 'mol2'],
dtype='|S4')
你能澄清一下最终想要的产量吗?