非方阵点乘算法

非方阵点乘算法

基于<算法4>中的P12矩阵相乘(方阵), 探索非方阵点乘.

线代基础

能够点乘的矩阵, 一定满足 前行=后列 .

算法思考

解决矩阵运算问题, 切勿凭空想象. 应脚踏实地, 举个简单例子写在草稿纸上, 并观察 各矩阵下标变化规律.

在这里插入图片描述
c表示结果矩阵, 第一列表示a矩阵(前), 第二列表示b矩阵(后).

下标变化一致的用同一变量记录, 观察一个变量不变的情况下其他变量的变化规律, 一般可以找出循环嵌套.

比如a的第二维度与b的第一维度的变化相同, 用k变量记录. 在a的第一维度不变的情况下, b的第二维度有规律的变化, 则可以用循环去嵌套.

Java实现

import java.util.Arrays;

public class lab {

    public static void main(String[] args) {
        int[][] a = new int[2][3];
        int[][] b = new int[3][2];

        int n = 1;

        for(int i = 0; i < 2; i++) {
            for(int j = 0; j < 3; j++) {
                a[i][j] = n;
                ++n;
            }
        }

        System.out.println(Arrays.deepToString(a));

        n = 1;

        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 2; j++) {
                b[i][j] = n;
                ++n;
            }
        }

        System.out.println(Arrays.deepToString(b));

        int a_rows = a.length;
        System.out.println(a_rows);

        int b_columns = b[0].length;
        System.out.println(b_columns);

        if(a_rows != b_columns) {
            System.out.println("Error Shape: Matrix A and B must have a same shape!");
            System.exit(-1);
        }

        int N = a_rows;
        int K = a[0].length;

        int[][] c = new int[N][N];
        for(int i = 0; i < N; i++) {
            for(int j = 0; j < N; j++) {
                for(int k = 0; k < K; k++) {
                    c[i][j] += a[i][k] * b[k][j];
                }
            }
        }

        System.out.println(Arrays.deepToString(c));

    }
}

运行效果

[[1, 2, 3], [4, 5, 6]] # a
[[1, 2], [3, 4], [5, 6]] # b
2 # a_rows
2f # b_columns
[[22, 28], [49, 64]] # c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值