对于在大学里进行的练习,我们必须在Python中实现具有精确牛顿力的Leapfrog积分器.课程结束了,我们的解决方案已经足够好了,但我想知道是否/如何能够更好地提高力计算的性能.
瓶颈是计算所有力(即加速度):
对于大(1000和更大)数量的粒子N(i,j <N).
这里r 1和r 2是存储在形状(N,3)的ndarray中的粒子位置的三维向量,Gm是粒子质量乘以我在形状ndarray中保存的重力常数(N) .
我到目前为止发现的最快版本如下:
def a(self):
sep = self.r[np.newaxis, :] - self.r[:, np.newaxis]
# Calculate the distances between all particles with cdist
# this is much faster than by hand
dists = cdist(self.r, self.r)
scale =dists*dists*dists
# set diagonal elements of dist to something != 0, to avoid division by 0
np.fill_diagonal(scale,1) …
Run Code Online (Sandbox Code Playgroud) 我正在用 Yesod 和 Persistent 编写一个 webapp。我有一个包含多个表的 SQL 数据库,其中包含我的“项目”的特征。我有一个主表和带有多个值的 Option 与 id 链接的额外表。
用户应该能够选择他想要过滤的那些特征并指定过滤器值。如果用户筛选操作系统,则 SQL 查询的许可证和编码将如下所示:
runquery :: (YesodPersist site, YesodPersistBackend site ~ SqlBackend) =>
String -> String -> String
-> HandlerT site IO [Entity Project]
runquery os license coding = runDB
$ select $ distinct
$ from $ \(p `InnerJoin` pl `InnerJoin` l `InnerJoin` pc
`InnerJoin` c `InnerJoin` o `InnerJoin` po) -> do
on $ p ^. ProjectId ==. pl ^. ProjectLicenseFkProjectId
on $ p ^. ProjectId ==. pc ^. …
Run Code Online (Sandbox Code Playgroud)