Python資料科學之矩陣乘法
阿新 • • 發佈:2019-01-23
背景
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]
本質上就是將一個求和公式轉換為程式碼,至此就理解矩陣乘法的含義了。