1. 程式人生 > >Python資料科學之矩陣乘法

Python資料科學之矩陣乘法

背景

Python資料分析離不開矩陣的基礎知識,週末看了一章節的數學基礎知識,重新學習了一下矩陣的乘法知識,線性代數的知識還是十年前上大學時學的,早就忘乾淨了,今日重新整理了一下,其實就是基本的規則記憶,還是能夠理解的。

矩陣乘法定義

百度得到的定義為:

設A為 nXp的矩陣,B為pXm的矩陣,那麼稱nXm的矩陣C為矩陣A與B的乘積,記作C=AB,其中矩陣C中的第i行第j列元素可以表示為:A的第i行的每一個元素,逐一與B的第j列的對應行位置的元素相乘後的累加和,用數學符號表示如下:

A= (ai,j)∈ Rn×p
B= (bj,j)∈ Rp×m
AB=(∑r=1..p ai,r * br.j)∈ Rn×m

備註:累加符號的定義沒有調整好,累加總次數是A的列數p。

線性規劃中的矩陣乘法

以百度百科的第一個例子來理解矩陣乘法的應用,A矩陣標識產品的產量,矩陣B的第一列表示產品的利潤,第二列表示產品的容積,那麼矩陣AXB的得到的矩陣的第一列就是產品的利潤,第二列就是產品的體積。
摘錄:https://baike.baidu.com/item/矩陣乘法/5446029?fr=aladdin
這裡寫圖片描述

矩陣很巧妙的將多個維度的資訊在同一個矩陣中呈現,有了這個統計的例子,就更容易理解矩陣乘法在實際生活中的應用了。

Java實現矩陣乘法

根據矩陣乘法定義的公式,主要是確定C的每行每列的元素,將其轉換為Java程式碼如下:

import java.util.Arrays;

/**
 * 矩陣相乘Java程式碼實現
 * @author woodwang
 *
 */
public class MatrixMultiply {
    public static void main(String[] args) {
        int [][] a= {{1,2},{3,4}} ;
        int [][] b= {{5,6,7},{8,9,10}};

        MatrixMultiply multiply = new MatrixMultiply();

        multiply.printMatrix(a);
        multiply.printMatrix(b);
        multiply.printMatrix(multiply.multiply(a,b));

    }

    /**
     * 矩陣a X b = c
     * @param
a * @param b * @return */
public int[][] multiply(int[][]a,int[][]b){ /** * c的行數=a的行數;c的列數=b的列數 * 二維陣列第一行的長度即列數 * 二維陣列總長度即行數 */ int cRows = a.length; int cColumns = b[0].length; int[][] result = new int[cRows][cColumns]; /** * 確定C的各個元素的值 */ for(int i=0;i<cRows;i++) { for(int j=0;j<cColumns;j++) { result[i][j] = sum(i,j,a,b); } } return result; } /** * 將a的第i行的每一個元素,逐一和b的第j列的元素相乘,並將結果累加 * @param i * @param j * @param a * @param b * @return */ private int sum(int i, int j, int[][] a, int[][] b) { int sum = 0; int columns = a[i].length;//總列數 /** * a的i行的每一個數,分別與b的j列的每一個數相乘 * 迴圈總次數為a的列數 */ for(int k = 0;k<columns;k++) { sum+=a[i][k]*b[k][j]; } return sum; } public void printMatrix(int[][] matrix) { System.out.println("列印矩陣資訊如下:"); int rows = matrix.length; for(int i=0;i<rows;i++) { System.out.println(Arrays.toString(matrix[i])); } } }

執行結果如下:

列印矩陣資訊如下:
[1, 2]
[3, 4]
列印矩陣資訊如下:
[5, 6, 7]
[8, 9, 10]
列印矩陣資訊如下:
[21, 24, 27]
[47, 54, 61]

本質上就是將一個求和公式轉換為程式碼,至此就理解矩陣乘法的含義了。