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 循环?

4

1 回答 1

1

尝试将坐标提取到 python 坐标列表中,然后一次性将其转换为 numpy 数组。如果标签值从 1 到 是连续的nnod,就这么简单:

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

使用生成器执行此操作会更好一些(这样可以避免创建中间数组),但是 numpy 只能从生成器创建一维数组,使用numpy.fromiter().

于 2012-05-05T14:56:39.947 回答