1. 把 python 科学计算环境换成了 Anaconda

    此前尝试过 python(x,y),但最终还是换回了纯 python 的环境,一方面是因为它太大,另一方面它实在包含了太多不可控的东西,包括潜在的污染系统 python 的危险等。偶然看到 Anaconda 的介绍,似乎是一种较为「绿色」的方案,而且带的科学计算包也比较全,试着装了一下,确实不错。Anaconda 的一个主要优势在于,它集成了绝大部分常用的计算包,并全部放在自己的文件夹中,与系统内已安装的 Python 相对独立,因此安装下来非常干净。如果其它人也想运行在这个环境下写出来的代码,只需要安装 Anaconda 环境即可,而不再需要一个一个把需要的包都下载下来,这一点,在与其它人交流代码时就太方便了。

    从原来配置的环境换到 Anaconda 也非常简单,大概会有这么几个问题:

    1. 删除重复的包,如 numpy / scipy / matplotlib 等,用 pip uninstall 即可 …

    read more
  2. 用 VPN 时的一些小问题

    从5月35日前两天左右开始,gg开始几乎全系被封,干脆买了个收费的 VPN,想一次性解决问题。当然,事实证明也没有这么简单,还是碰到了大大小小的不少问题,大致罗致如下:

    1. L2** 比 PP** 的「安全性」更好,一般推荐用前者;
    2. 路由表是个好东西,尤其是 chnroutes,它可以实现让国内流量不走 VPN,大量节约收费资源,并且提高速度;
    3. 在我的情况里,L2** 协议再加载智能路由表时,会导致上不了百度,至今没弄明白怎么回事,现在较好的解决办法是在浏览器里再用一个自动代理,让域名带 baidu.com 的都从一个国内的高速缓存里过,算是一个曲线救国的办法了。
    read more
  3. Python 输出用于 Paraview 后处理的 vtk 文件

    好拗口的标题。。。

    前面的博客中已经提到,Python 有 Matplotlib 这种强大的包可以「在线」地生成(并保存)漂亮的图形,但对于计算流体力学的后处理来说,很多时候需要更多「事后」的后处理。在线的即时输出,虽然可以快速预览结果,但对于想输出什么结果必须在写程序阶段就全部想明白,而不是先计算完,按一定间隔输出整个流场的信息,然后后期想要什么数据慢慢提取分析就行。

    解决这个问题的方法也很简单,直接照抄开源 LBM 软件 Palabos 的方案,用 vtk 格式保存流场信息,然后用 Paraview 进行后处理。

    这个「十分简单」的技术路线结果却花了我很多天的时间,才基本搞清楚其中的奥秘,从多个 tricky part 中脱身。技术上来说,Python 输出 vtk 有成熟的软件包(我采用的是pyevtk 这个库[1]),实现方法也比较直观。例如官方提供的一个示例是这样的 …

    read more
  4. 用 numexpr 库优化 numpy 计算速度

    NumPy 虽然通过底层高度优化过的计算库可以实现接近C的高效计算,但在计算复杂且计算量庞大的时候多少还是有些嫌慢。Numexpr 库是最近发现的一个非常简单易用的 Numpy性能提升工具,很大程度上从我的需求上解决了性能的问题。

    先看一个例子:

    import numpy as np
    import numexpr as ne
    nx, ny = 1200, 1500
    a = np.linspace(0.,3.1416,nx*ny).reshape(nx,ny)
    for i in range(100):
        b = np.sin(a+i)**2 + np.cos(a+i)**2 + a**1.5 …
    read more
  5. 关于 Numpy 数组作为函数参数的一个小问题

    注:本文的所写的只是我自己想出来的一个办法,很可能不是最优或者最标准的做法,如果有高手看到,欢迎指正!

    在计算过程中遇到这样的一个问题,需要对一个 nx*ny 的网格上每一个节点调用一次函数,然后返回一个 nx*ny 的数组。

    我之前就写过类似的程序,numpy 可以直接调用普通的计算程序,比如:

    def x_square(x):
        return x*x
    a = np.arange(nx*ny).reshape(nx,ny)
    print x_square(a)

    直接把 ndarray 对象作为参数传入函数,就可以得到一个正确的结果。

    于是,想当然地,也针对上面的需求,写了这样一个程序:

    ff = np.linspace(1.0,2.0 …
    read more
  6. 用Python作流场计算时的后处理问题

    由于我现在正试图用Numpy来实现 Lattice Boltzmann method 的算法,也会涉及到一些简单的后处理功能。这里的后处理具体的说是输出一些关于流场的图像问题,因为输出单点的信息没有任何难度。而图像输出主要是依靠 Matplotlib 这个强大的库来完成。后续如果要做进一步的后处理的话,应该还是要学一学如何导出数据到专业后处理软件中,但就调试过程而言,能及时输出一些直观的图像是十分必要的。

    我现在采用的办法是把关于流场的属性存储于数组中(rho[nx_ny]、u[nx_ny*2] 等),用 node 编号来索引具体的数值。这种情况,因为还不涉及格子单位和物理单位的转换,后处理的逻辑还是比较简单的。一般地说来,会用到的图像可分为两类,一类是标量场,主要是云图,另一类是矢量场,主要是矢量图(vector graph)和流线图。这两类图形的绘制方法都很接近,掌握一种的话,通过查询官方在线文档,基本都可以很快找到另外几种的用法。

    例如,对于标量场,如密度场 rho[nx*ny],可以用 matplotlib.pyplot …

    read more

« Page 7 / 9 »

links

social