Other articles


  1. Python中指针式传递的函数遇到的问题

    最近在尝试通过 multiprocessing 把原来的计算核心改为通过多进程实现的并行程序,但碰到了一个非常奇怪的问题,经过一些时间的排查,终于找到了问题所在。虽然问题本身很简单,但也许也有一定典型性,尤其是对编程新手而言,因此在这里用最简单的模型重现一下。

    首先从下面一段非常简单的程序开始:

    def main():
        x = [1, 2, 3, 4, 5]
        foo(x)
        print(x)
    
    def foo(x):
        bar(x)
        # x = bar2(x)
        for i in range(len(x)):
            x[i] = x[i]**2
    
    def bar(x):
        for i in range(len …
    read more
  2. 初试 Julia 语言

    上一篇博文中推荐了 Python 的 JIT 编译器 numba,这两天又用空余的时间尝试了一下最近的一个新兴语言 Julia。Julia 的目标设定得很高,未来是要成为一个速度上接近甚至超过 Fortran/C 这样的传统语言的通用编程语言。然而就我这两天很初步的尝试结果看来,它也许有这个能力,但至少目前,对工程计算的人来说,还没有达到 production-ready 的程度。(当然,这只是基于我个人的编程经验和需求的结论,很可能不适用于其他人。而且Julia本身是一门相对年轻的语言,很值得持续关注。)

    之所以这样说,有三个方面的理由:

    1. 作为一个动态语言,它的 JIT 编译器(在很多情况下)还没有智能到,让我可以同时享受动态语言的便利和它的速度优势。例如最近我在试用 Julia 时最先尝试的就是把原来用 Numba 写的函数重写一遍,然而发现结果非常不好。Julia 版本的函数执行速度相当于纯 Python 的速度,与 Numba …
    read more
  3. 推荐使用Numba加速Python科学计算

    因为正在用 Python 写 lattice Boltzmann 的原因,我时不时也会研究 Python 科学计算程序的加速方法。现在为止,陆续尝试过了几个方案,包括 numexpr、Cython 等等,也写了一些博文(12)。而这篇文章,则是要作一个推荐,建议所有在使用 Python 做科学计算的人尝试一下 Numba。

    推荐的原因,首先得从 Python 科学计算说起。

    Python 本身由于其动态语言的本质,并不适合于计算量很大的科学计算。然而 Numpy 提供的带类型的数据结构,以及预编译好的基于 C 或 Fortran 的高速计算库,很大程度上解决了这个问题。绝大部分基于 Python 的科学计算程序,都是将其数据储存在 ndarray 里的。按我自己目前的认识,Numpy _至少_带来了两个方面的好处,一是存储的数据带有类型 …

    read more
  4. 一个反直觉数学题的程序验证

    很久之前看到的东西了,今天总算抽空把它写完了。

    最开始是在 Quora 上看到一个很有意思的答案,虽然是简单的抛硬币问题,但结果确实是相当反直觉,因此,干脆用 Python 写了一系列的小程序,来验证这些结果。

    第一个游戏很简单,抛一个硬币,连续抛两次,先后出现正面(heads,后面记为H)和反面(tail,后面记为T)的概率是ht,先后出现HH的概率记为hh。很显然,两者相等。程序验证也很简单,试验十万次,看分别出现多少次。

    def game1():  
        # flip twice, the possibility of HH or HT  
        hh = 0; ht = 0  
        for i in xrange(100000):  
            pre = ''; cur …
    read more

Page 1 / 3 »

links

social