search

Home  >  Q&A  >  body text

Python 科学计算中的矩阵替代循环怎么用?

Python 科学计算中的矩阵替代循环怎么用?

末日的春天末日的春天2828 days ago1615

reply all(2)I'll reply

  • 数据分析师

    数据分析师2017-10-01 00:36:05

    How to use matrix substitution loop in scientific computing in Python? -PHP Chinese website Q&A-How to use matrix substitution loop in Python scientific computing? -PHP Chinese website Q&A

    Let’s take a look and learn.

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-03-01 09:41:15

    比如求一个平面稳态导热问题,控制方程就是拉普拉斯方程:

    (我才发现原来有[插入公式]这个功能)

    按照最简单的毅种循环来写就是:

    def laplace(u):
         nx, ny = u.shape
         for i in xrange(1,nx-1):
           for j in xrange(1, ny-1):
             u[i,j] = ((u[i+1, j] + u[i-1, j]) * dy2 +  (u[i, j+1] + u[i, j-1]) * dx2) / (2*(dx2+dy2))

    虽然能用的运算没多少吧但是对大矩阵的整体运算还是很快的←_← 最近正好在学numpy这个模块。题主可以看看这个教程,不是很全,但是科学计算方面还是有不少东西的:NumPy-快速处理数据
    引用教程中的代码:

    import time
    import math
    import numpy as np
    x = [i * 0.001 for i in xrange(1000000)] # 初始化数组0.000~999.999
    start = time.clock()
    for i, t in enumerate(x):                # 用循环计算正弦值
        x[i] = math.sin(t)               
    print "math.sin:", time.clock() - start
     
    x = [i * 0.001 for i in xrange(1000000)]
    x = np.array(x)                          # 初始化矩阵(这里是一维)
    start = time.clock()
    np.sin(x,x)                              # numpy的广播计算(代替循环)
    print "numpy.sin:", time.clock() - start
    # 输出
    # math.sin: 1.15426932753
    # numpy.sin: 0.0882399858083

    用numpy, Cython, 或者 weave
    Speed up Python
    SciPy官网有关于如何提高Python Performance的教程
    PerformancePython
    用Pyrex/Cython或者weave基本上可以达到C++的速度。
    Laplace的例子,500*500矩阵,100次循环。


    reply
    0
  • Cancelreply