我在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 :(得分:1)
尝试将坐标提取到python坐标列表中,并一次性将其转换为numpy数组。如果标签值从1到nnod
是连续的,那么就像这样简单:
coords = [ n['coordinates'] for n in meshnodearray ]
NODEcoo = np.array(coords)
使用生成器(这可以让你避免创建中间数组)会更好一些,但是numpy只能使用numpy.fromiter()
从生成器创建一维数组。