2013-11-20 48 views
1

獲得列我有一個相當複雜的嵌套列表:每個元素是具有兩個元素的元組:一個是一個對象,另一種是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') 

,爲2Darrays喜歡:

array([[1,1,1],[1,1,1],[1,1,1],[1,1,1]]) 

我有一個解決方案,但我認爲這是非常低效:

zip(*toy)[0] 

返回

('mol1', 'mol2') 

然後

zip(*toy)[1][0][:,0] 

返回

array([[1, 1, 1], 
    [1, 1, 1]]) 

一個用於像

for i in range(len(toy)): 
    zip(*toy)[1][i][:,0] 

週期給出了列的所有元件和我可以用vstack建立它

+0

您能否澄清*最終*想要的輸出? – Veedrac

回答

1

這應該是合理有效的:

>>> tuple(t[0] for t in toy) 
('mol1', 'mol2') 

對於二維數組,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]]) 
1

可以使用數組numpy的存儲數據或你轉換爲,然後用柱切割功能內置。一般numpy切片非常快。

import numpy as np 
np.asarray(toy)[::, 0] # first column 

# output 
array(['mol1', 'mol2'], 
     dtype='|S4')