使用二维数组实现线性代数中的矩阵相乘(JAVA代码实现)

现在快凌晨三点了,刚刚写完树的排序,我却一点都不困,写一篇博客压压惊。

线性代数中的矩阵相乘

定义

设A为 的矩阵,B为 的矩阵,那么称 的矩阵C为矩阵A与B的乘积,记作 ,其中矩阵C中的第 行第 列元素可以表示为:
在这里插入图片描述

如下所示:

在这里插入图片描述

注意事项

1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

代码逻辑

分析

  • 首先,我们用二位数组来定义一个矩阵,那么int[m][n]就代表着一个m行n列的矩阵。
  • 根据两个矩阵相乘的原则,两个矩阵A , B相乘,需要A的列数等于B的行数,且最终得到的矩阵C是A的行数和B的列数。也就是我们定义两个
    int[m][n] 和 int[n][k]两个矩阵相乘,最终得到的是int[m][k] 。
  • 其次,得到的矩阵C第i行,第j列的值是矩阵A的第i行乘以矩阵B的第j列的所有数的相加的和,所以我们至少要遍历一遍A的所有行和B的所有列才能得出相乘后的结果C。

代码实现

/**
 * @program: algorithm_code
 * @description: 矩阵相乘的计算
 * @author: YangHang
 * @create: 2019-07-20 00:28
 **/

public class MatrixMultiplication {

    public static void main(String[] args) {

        // 创建两个矩阵
        int[][] arr1 = new int[5][4];
        int[][] arr2 = new int[4][6];

        // 填充数据
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[0].length; j++) {
                arr1[i][j] = (int) (Math.random() * 10 + 1);
            }
        }

        for (int i = 0; i < arr2.length; i++) {
            for (int j = 0; j < arr2[0].length; j++) {
                arr2[i][j] = (int) (Math.random() * 10);
            }
        }

        print(arr1);
        print(arr2);

        // 计算两个矩阵相乘
        int[][] arr3 = new int[arr1.length][arr2[0].length];

        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2[0].length; j++) {
                for (int k = 0; k < arr2.length; k++) {
                    arr3[i][j] += arr1[i][k] * arr2[k][j];
                }
            }
        }

        print(arr3);
    }

    private static void print(int[][] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }

        System.out.println();
        System.out.println();
    }
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大航子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值