Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

線形代数。固有値 (Python 3: decorator (デコレータ), @staticmethod, NumPy: linalg, eigvals(), SciPy: linalg, eigvals())

使用するライブラリ

NumPy

SciPy

Python 3 コード

np_sp_eigvals.py

#!/usr/bin/env python3


"""(docstring)
"""


import numpy as np
import scipy.linalg as sp_la


# (@staticmethod がどうしてもなくてはならないということではないが)。
# (@staticmethod の議論については、『Fluent Python』が助けになる。要不要どちらの立場でも)。
class NpSpEigvals:
    """(docstring)
    """

    @staticmethod
    def np_la_eigvals(mat):
        """(docstring)
        """
        return np.linalg.eigvals(mat)

    @staticmethod
    def sp_la_eigvals(mat):
        """(docstring)
        """
        return sp_la.eigvals(mat)


if __name__ == '__main__':
    A = np.array([[3, -5, -5],
                  [-1, 7, 5],
                  [1, -9, -7]])

    B = np.array([[9, 10],
                  [-6, -7]])

    C = np.array([[11, 9],
                  [-4, -1]])

    D = np.array([[5, -7, -7],
                  [-4, 8, 7],
                  [4, -10, -9]])

    E = np.array([[2, 5, -4],
                  [3, 4, -4],
                  [2, 6, -5]])

    mat_list = [A, B, C, D, E]

    for idx, mat in enumerate(mat_list):
        print('({})\n'.format(idx+1))
        print('NumPy: ', NpSpEigvals.np_la_eigvals(mat))
        print('SciPy: ', NpSpEigvals.sp_la_eigvals(mat))
        print('')
        print('-'*79)

出力

$ python3 np_sp_eigvals.py
(1)

NumPy:  [ 3.  2. -2.]
SciPy:  [ 3.+0.j  2.+0.j -2.+0.j]

-------------------------------------------------------------------------------
(2)

NumPy:  [ 3. -1.]
SciPy:  [ 3.+0.j -1.+0.j]

-------------------------------------------------------------------------------
(3)

NumPy:  [5. 5.]
SciPy:  [5.+0.j 5.+0.j]

-------------------------------------------------------------------------------
(4)

NumPy:  [ 5.  1. -2.]
SciPy:  [ 5.+0.j  1.+0.j -2.+0.j]

-------------------------------------------------------------------------------
(5)

NumPy:  [ 3.+0.00000000e+00j -1.+4.08236165e-08j -1.-4.08236165e-08j]
SciPy:  [ 3.+0.00000000e+00j -1.+4.08236165e-08j -1.-4.08236165e-08j]

-------------------------------------------------------------------------------

参考文献 (数式を参考)

基本演習 線形代数 (基本演習ライブラリ)

基本演習 線形代数 (基本演習ライブラリ)