【问题标题】:Efficient way of extracting from an array of objects从对象数组中提取的有效方法
【发布时间】:2023-03-04 22:43:01
【问题描述】:

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

【问题讨论】:

  • 如果你必须对数组中的所有对象都这样做,那么我看不到其他方法。
  • 是的,我需要为所有对象执行此操作。
  • 列表推导就可以了。

标签: python arrays multidimensional-array numpy


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,这有点快。这是否可以并行完成以进一步加快速度?
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
相关资源
最近更新 更多