我正在尝试使用python 3.6计算一个气缸在另一个气缸上的重力。为此,我将每个圆柱体分成点质量,然后计算圆柱体1中每个点质量对圆柱体2中每个点质量的力。当然我想使这些点质量尽可能小,但是数量计算量增长很快。因此,我正在尝试优化我的代码。 它看起来像这样
Dataset
我已经使用过cProfiler,函数F最常被调用并占用大部分时间。我对它做了一些改进,现在我认为不会有更多的收获。
接下来我想我可以使用多线程同时计算多个元素的力。但是,这根本没有帮助。这是我试过的:
class Mass:
def calcForceFrom(self, p_mass):
F_total = np.array([0.0, 0.0, 0.0])
for i, element in enumerate(self.elements):
p_mass.calcForceOn(element)
F_total = F_total + element.sum_of_forces
return F_total
def calcForceOn(self, p_target):
# calculates the force from this Mass on some point mass
for element in self.elements:
p_target.addForce(Mass.F(p_target, element))
@staticmethod
def F(p_target, p_element):
# difference vector
r = p_element.x - p_target.x
# calculate length^3/2
rr = (r.dot(r))**(3/2)
return p_element.m * p_target.m / rr * r
F_12 = cyl1.calcForceFrom(cyl2)
使用此方法计算时间增加一倍以上。我认为将这些计算并行运行会提高速度。显然我错了。
那么,为什么这不起作用?我应该使用多处理用例?还有哪些方法可以提高我的计算速度?
BTW:在问题中使用对称来减少我需要计算的点数已经在我的待办事项列表中。