小编Nud*_*din的帖子

numpy/scipy中牛顿力的最佳性能计算

对于在大学里进行的练习,我们必须在Python中实现具有精确牛顿力的Leapfrog积分器.课程结束了,我们的解决方案已经足够好了,但我想知道是否/如何能够更好地提高力计算的性能.

瓶颈是计算所有力(即加速度):

a <sub> i </ sub> =Σ<sub> j≠i </ sub> Gm <sub> j </ sub>/| r <sub> 1 </ sub> -r <sub> 2 </ sub > | <sup> 3 </ sup>*(r <sub> 1 </ sub> -r <sub> 2 </ sub>)

对于大(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)

python arrays performance numpy scipy

6
推荐指数
1
解决办法
604
查看次数

使用 Esqueleto 和 Template Haskell 动态构建 SQL 查询?

我正在用 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)

haskell template-haskell esqueleto haskell-persistent

5
推荐指数
1
解决办法
227
查看次数