Python数据科学之矩阵乘法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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]

本质上就是将一个求和公式转换为代码,至此就理解矩阵乘法的含义了。

猜你喜欢

转载自blog.csdn.net/wojiushiwo945you/article/details/80961057