首页 > 解决方案 > Pythonic OOP 和 sklearn/numpy 优化

问题描述

我经常遇到这个问题,我使用 OOP 开发我的代码,当我想使用 numpy、sklearn 模块或任何其他“矩阵”加速程序时,如果不循环所有对象,我无法找出最好的方法.

例如,我有一个名为 Particle 的对象,它的坐标为 x:

class Particle(object):
     def __init__(self, x):
         self.x = x

然后我创建了一堆像:

from numpy.random import random
np = 100
p = []
points = random((np, 3))
for i in range(np):
    p.append(Particle(points[i, :]))

最后,我想得到粒子之间的距离。为此,我可以使用蛮力搜索并评估距离的范数,或者使用优化的模块来更快地完成它,例如:

from sklearn.metrics.pairwise import pairwise_distances
pairwise_distances(X=points)

然而,这样我没有使用 OOP 的优势。

我试过一些奇怪的东西,比如:

pairwise_distances(X=p[:].x)

但当然,它不起作用。

我遇到的另一个例子与捕食者-猎物模型有关。理想情况下,从数字的角度来看,我会将每只动物组装成矩阵形式,这样解决起来会更快,但从 OOP 中我创建了一个包含常量的动物对象,为了解决它,我陷入了混乱且缓慢的代码。

有没有办法以优雅的 Python 方式解决这些问题?我应该选择以一种方式编程而不是另一种吗?

谢谢你。

标签: python-3.xoopscikit-learn

解决方案


推荐阅读