矩阵乘法的java实现

举报
别团等shy哥发育 发表于 2023/02/04 11:33:39 2023/02/04
【摘要】 @[toc] 1、算法思想最近老是碰到迭代问题,小数太多手算又算不过来,写个矩阵乘法辅助一下吧。有两个矩阵A和B,计算矩阵A与B相乘之后的结果C。A的列数必须等于B的行数用矩阵A的第i行的值分别乘以矩阵B的第J列,然后将结果相加,就得到C[i][j]。矩阵A的行等于C的行,矩阵B的列等于C的列,这两个数值用来控制循环的次数,但是每一步中需要把行和列中对应的乘机求和,所以再加一个内循环控制乘法...

@[toc]

1、算法思想

最近老是碰到迭代问题,小数太多手算又算不过来,写个矩阵乘法辅助一下吧。

有两个矩阵A和B,计算矩阵A与B相乘之后的结果C。
A的列数必须等于B的行数

用矩阵A的第i行的值分别乘以矩阵B的第J列,然后将结果相加,就得到C[i][j]。
矩阵A的行等于C的行,矩阵B的列等于C的列,这两个数值用来控制循环的次数,但是每一步中需要把行和列中对应的乘机求和,所以再加一个内循环控制乘法求和就行。

下面我们进行矩阵乘法的测试

A = [ 1 2 3 4 5 6 7 8 9 1 1 1 ] B = [ 1 0 0 0 1 0 0 0 1 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9\\ 1 & 1& 1 \end{bmatrix} B= \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\\ \end{bmatrix}

2、代码实现

package com.Unit4;

public class Multiply {

    /**
     * 矩阵乘法
     *
     * @param x1 第一个矩阵
     * @param x2 第二个矩阵
     */
    public static void multiplyMatrix(int x1[][],int x2[][]){
        //前提条件:第一个矩阵的列必须等于第二个矩阵的行
        if(x1[0].length!=x2.length){
            System.out.println("不满足相乘的条件");
            return;
        }
        int lineLength=x1.length;   //第一个矩阵的行
        int listLength=x2[0].length;//第二个矩阵的列
        int[][] multiply=new int[lineLength][listLength];//相乘的结果矩阵
        //乘法
        for(int i=0;i<lineLength;i++){
            for(int j=0;j<listLength;j++){
                for(int k=0;k<x1[0].length;k++){
                    multiply[i][j]+=x1[i][k]*x2[k][j];
                }
            }
        }
        System.out.println("相乘之后的结果为:");
        for(int i=0;i<multiply.length;i++){
            for(int j=0;j<multiply[0].length;j++){
                System.out.print(multiply[i][j]+" ");
            }
            System.out.print("\n");
        }
    }

    public static void main(String[] args) {
        //4*3
        int[][] x1={{1,2,3},{4,5,6},{7,8,9},{1,1,1}};
        //3*3
        int[][] x2={{1,0,0},{0,1,0},{0,0,1}};
        multiplyMatrix(x1,x2);

    }
}

我们用一个4*3的矩阵去和一个3*3的单位矩阵相乘,方便我们观察结果。
在这里插入图片描述
可以看到最后的计算结果为:

A = [ 1 2 3 4 5 6 7 8 9 1 1 1 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9\\ 1 & 1& 1 \end{bmatrix}

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。