2012-05-05 57 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