Python 3 で数学を。

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

線形代数。行列の積。積 AB が定義されるものとされないもの (Python 3: class (クラス), NumPy: shape, dot())

使用するライブラリ

NumPy

Python 3 コード

mat_dot.py

#!/usr/bin/env python3


"""(docstring)
"""


import numpy as np


class MatDot:
    """(docstring)
    """

    def __init__(self, A, B):
        """(docstring)
        """
        self.MD_A = A
        self.MD_B = B

    def mat_dot_func(self):
        """(docstring)
        """
        if self.MD_A.shape[1] != self.MD_B.shape[0]:
            s = 'の行列の積 AB は定義できない。'
            return '{}, {} {}'.format(self.MD_A.shape, self.MD_B.shape, s)

        return np.dot(self.MD_A, self.MD_B)


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

    B1 = np.array([[2, 1], [-3, 4]])
    B2 = np.array([[2, -3], [-4, 1], [5, 1]])
    B3 = np.array([[3, 2, -4], [-4, 1, 3]])
    B4 = np.array([[1], [2], [-1]])
    B5 = np.array([4, -1, 3])
    B6 = np.array([[2], [1]])

    for i in [A]:
        for j in [B1, B2, B3, B4, B5, B6]:
            print('解答:\n')
            md = MatDot(i, j)
            print(md.mat_dot_func())
            print('')
            print('-'*79)

出力

$ python3 mat_dot.py
解答:

[[-11  11]
 [-13  21]
 [ 12  -5]]

-------------------------------------------------------------------------------
解答:

(3, 2), (3, 2) の行列の積 AB は定義できない。

-------------------------------------------------------------------------------
解答:

[[-15   1  13]
 [-17   7  11]
 [ 17   4 -18]]

-------------------------------------------------------------------------------
解答:

(3, 2), (3, 1) の行列の積 AB は定義できない。

-------------------------------------------------------------------------------
解答:

(3, 2), (3,) の行列の積 AB は定義できない。

-------------------------------------------------------------------------------
解答:

[[1]
 [7]
 [4]]

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

参考文献 (数式を参考)

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

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