创建numpy阵列的速度比循环快

创建numpy阵列的速度比循环快,numpy,Numpy,我有一个包含点云(大约100个激光雷达点)的阵列。我需要尽快创建一组numpy阵列 sweep = np.empty( shape=(len(sweep.points),), dtype=[ ('point', np.float64, 3), ('intensity', np.float32), ## ..... more fields .... ] ) for index, point in enumerate(swee

我有一个包含点云(大约100个激光雷达点)的阵列。我需要尽快创建一组numpy阵列

sweep = np.empty(
    shape=(len(sweep.points),),
    dtype=[
        ('point', np.float64, 3),
        ('intensity', np.float32),
        ## ..... more fields ....
    ]
)

for index, point in enumerate(sweep.points):
        sweep[index]['point'] = (point.x, point.y, point.z)
        sweep[index]['intensity'] = point.intensity
        ## ....more fields...

编写显式循环效率很低,速度也很慢。有更好的方法吗?

使用列表理解来格式化数据并将其直接传递给numpy数组稍微快一点:

np.array([((point.x, point.y, point.z), point.intensity)
          for point in points],
         dtype=[('point', np.float64, 3),
                ('intensity', np.float32)])

使用列表理解来格式化数据并将其直接传递给numpy数组稍微快一点:

np.array([((point.x, point.y, point.z), point.intensity)
          for point in points],
         dtype=[('point', np.float64, 3),
                ('intensity', np.float32)])

如果这有关系的话,可能还要快5%左右。更改代码只需将np.array更改为np.fromiter,将列表理解更改为生成器表达式,并添加参数count=len(points)。实际上,有没有一种并行的方法来执行此操作?(显然,如果没有我明确地编写并行代码的话)可能还要快5%左右。更改代码只需将np.array更改为np.fromiter,将列表理解更改为生成器表达式,并添加参数count=len(points)。实际上,有没有一种并行的方法来执行此操作?(显然没有我明确地编写并行代码)我推断,
sweep
是一个
对象的列表,其中每个
都有您想要放置数组字段的属性,对吗?等等,这样不行。定义了
数组后,
扫描
现在是一个数组,而不是对象列表!我推断,
sweep
是一个
对象的列表,其中每个
都有要放置数组字段的属性,对吗?等等,这样不行。定义了
数组后,
扫描
现在是一个数组,而不是对象列表!