2012-05-05 87 views
1

我有對象的陣列中的Python:高效方式

meshnodearray = ['MeshNode object', 'MeshNode object', 'MeshNode object', ...] 

其中例如第一「MeshNode對象」是:

({'coordinates': (15.08, 273.01, 322.61), 'instanceName': None, 'label': 1}) 

我需要創建像這樣的座標陣列:

NODEcoo = np.zeros((nnod,3),dtype='float64') 
for i in meshnodearray: 
    NODEcoo[i.label-1,0:] = np.array(i.coordinates) 

對於大型數組,這很慢。有沒有更有效的方式來做到這一點,也許沒有for循環?

+0

如果你必須爲數組中的所有對象做到這一點,那麼我看不到任何其他方式。 – cobie

+0

是的,我需要爲所有對象做這件事。 – spule

+0

列表解析會做。 – cobie

回答

1

嘗試將座標提取到python座標列表中,並一次性將其轉換爲numpy數組。如果標籤值的順序從1到nnod,它是如此簡單:

coords = [ n['coordinates'] for n in meshnodearray ] 
NODEcoo = np.array(coords) 

這將在一定程度上更好地與發電機(這將讓你避免創建中間陣列)要做到這一點,但numpy的能從發生器創建一維數組,使用numpy.fromiter()

+0

謝謝,這有點快。這可能會並行進行,以進一步加快速度? – spule