版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wojiushiwo945you/article/details/80961057
背景
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]
本质上就是将一个求和公式转换为代码,至此就理解矩阵乘法的含义了。