gpt4 book ai didi

python - 创建对象集合的最有效方法?

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:05 27 4
gpt4 key购买 nike

在 python 中创建相似对象集合的最有效方法/数据结构是什么?

示例:

假设我有许多 Point() 实例。每个实例都有一个 x 属性。

我想将它们组合在一起,以便执行批量操作等。

我可能会简单地将它们全部放在一个列表中:

points = [Point(x=1), Point(4), Point(7)... Point(1)]

我可以创建一个简单地将此列表作为输入的类:

Class PointCollection():

def __init__(self, points):
""" points is a list of Point() instances """
self.points = points

为了访问所有的 x 属性,该类可能有一个如下所示的方法:

@property
def allX(self):
return [pnt.x for pnt in self.points]

我的问题是,有没有更好的方法?我可以想象对于大量点的集合,其具有需要循环访问的属性可能需要一些时间来计算。在更复杂的集合中,您可能有许多属性,或嵌套更深的属性(集合的集合?)。

有没有更好的数据结构来实现?或者转向 Cython 和/或多处理以获得更高性能可能更好?



编辑:

这里是关于我的具体问题的更多细节:

这涉及到一些 GIS 数据结构 - 即描述河流支流的类。这些的集合将描述一个河流网络,我会考虑访问整个网络的类似属性(如每个支流的 x 坐标,或“桩号”)以执行批量操作。

但是,我想要创建一个非常通用的“集合”结构的“最佳”方法,这就是我使用 Point() 示例的原因。我可以看到这对我工作的其他领域很有用......

最佳答案

如果您主要处理数字数据,请考虑使用 NumPy 及其 recarray :

>>> import numpy
>>> a = numpy.array([(1.0, 2.0), (7.3, -1.0), (4.2, 3.7)],
dtype=[("x", float), ("y", float)])
>>> b = a.view(numpy.recarray)
>>> b.x
array([ 1. , 7.3, 4.2])
>>> b[0]
(1.0, 2.0)

NumPy 对数组数据提供相当高效的矢量化操作。

关于python - 创建对象集合的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com