Python でベクトル・行列演算


  numpy と scipy.linalg を使うため、まず import する。
    >>> import numpy
    >>> import scipy.linalg
  
□ ベクトルの要素に対する演算

  ベクトルの定義

    >>> v1 = numpy.array([1, 2, 3])
    >>> v1
    >>> v2 = numpy.array([[1], [2], [3]])
    >>> v2

    v1 はベクトルだが、v2 は 3x1 行列となっていることに注意。
  
  数学関数

    >>> v1**2
    >>> 2**v2
    >>> numpy.sin(v1)
    >>> numpy.cos(v2)
  
□ ベクトルに対する演算

  総和

    >>> numpy.sum(v1)

  平均

    >>> numpy.mean(v2)

  標準偏差

    >>> numpy.std(v1)

□ 行列の要素に対する演算

  行列の定義

    >>> M = numpy.array([[1, 2, 3],[4, 5, 6],[7, 9, 8]])
    >>> M

  数学関数

    >>> numpy.sin(M)
    >>> numpy.sqrt(M)

  行列の各行・列に対する演算

    >>> numpy.mean(M,axis=0)
    >>> numpy.mean(M,axis=1)
    >>> numpy.mean(M)

    'axis=0' で列、'axis=1' で行に対する演算となる。指定しないと行列全
    体で計算する。

□ 行列やベクトルに対する演算

  ベクトルの要素同士の演算

    >>> v1+v1
    >>> v2*v2
    >>> v1**v1

  ベクトルの積(内積)

    >>> v1.dot(v1)
    >>> v1.dot(v2)

    ベクトル同士の内積はスカラーになるが、ベクトルと行列の内積の結果は
    行列となることに注意。

  ベクトルの積(エルミート内積)

    >>> numpy.outer(v1,v1)

  行列の要素同士の演算

    >>> M+M
    >>> M*M

  行列の積

    >>> M.dot(M)

  ベクトルと行列の積

    >>> v1.dot(M)
    >>> M.dot(v1)
    >>> M.dot(v2)

    ベクトルに対する行列の積と、行列同士の積は結果が異なる。

□ 行列に対する演算

  逆行列

    >>> numpy.linalg.inv(M)
    >>> numpy.linalg.inv(M).dot(M)

  行列式

    >>> numpy.linalg.det(M)

  転置

    >>> M.T
    >>> v1.T
    >>> v2.T

    ベクトル(v1)は転置によって変化せず、v2 は 1x3 行列に変わる。

  複素共役転置

    >>> numpy.conj(M.T)
  
  行列関数

    >>> scipy.linalg.expm(M)
    >>> scipy.linalg.logm(M)
    >>> scipy.linalg.sqrtm(M)

  固有値と固有ベクトル

    >>> D, V = numpy.linalg.eig(M)

    V に固有ベクトルを列とする行列が返り,
    D に固有値のベクトルが返る.

□ ベクトル・行列の生成

  ベクトルの生成

    >>> numpy.arange(1,11)
    >>> numpy.arange(1,11,2)
    >>> numpy.linspace(1, 10, 5)

  行列の生成

    >>> numpy.eye(3,3)
    >>> numpy.diag([1, 2, 3])
    >>> numpy.zeros((4,3))
    >>> numpy.ones((3,4))
    >>> numpy.random.rand(3,3)
    >>> numpy.random.randn(3,3)

    rand は一様分布乱数を randn は正規分布乱数を成分にする行列を生成.


Python で数値計算
naniwa@rbt.his.u-fukui.ac.jp