矩阵乘法        ‌‍‎‏

news2024/12/27 7:26:01

矩阵乘法

      • C语言代码
      • C++ 语言代码
      • Java语言代码
      • Python语言代码


💐The Begin💐点点关注,收藏不迷路💐

计算两个矩阵的乘法:

设有矩阵(A)为(n×m)阶矩阵,矩阵(B)为(m×k)阶矩阵,二者相乘得到的矩阵(C)是(n×k)阶矩阵。

对于矩阵(C)中的元素(C[i][j])(其中(i)表示行序号,(j)表示列序号),其计算公式为:

[C[i][j] = A[i][0]×B[0][j] + A[i][1]×B[1][j] + … + A[i][m - 1]×B[m - 1][j]]。

输入

第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于100
然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于1000。

输出

输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。

样例输入

3 2 3
1 1
1 1
1 1
1 1 1
1 1 1

样例输出

2 2 2
2 2 2
2 2 2

先获取矩阵 (A) 的行数 (n)、列数 (m) 以及矩阵 (B) 的列数 (k),然后分别读取两个矩阵的元素内容,接着初始化结果矩阵的元素为 (0),再通过三层嵌套循环按照矩阵乘法的规则(即 (C[i][j] = A[i][0]×B[0][j] + A[i][1]×B[1][j] + …+ A[i][m - 1]×B[m - 1][j]))计算结果矩阵每个元素的值,最后按照矩阵的格式输出相乘后的结果矩阵。

C语言代码

#include <stdio.h>

int main() {
    int n, m, k;
    scanf("%d %d %d", &n, &m, &k);  // 读取矩阵A的行数n、列数m以及矩阵B的列数k

    int matrixA[n][m];  // 定义二维数组存储矩阵A的元素
    int matrixB[m][k];  // 定义二维数组存储矩阵B的元素
    int result[n][k];  // 定义二维数组存储矩阵相乘的结果,其为n行k列

    // 1. 读取矩阵A的元素
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &matrixA[i][j]);  // 逐行逐列读取矩阵A的元素
        }
    }

    // 2. 读取矩阵B的元素
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < k; j++) {
            scanf("%d", &matrixB[i][j]);  // 逐行逐列读取矩阵B的元素
        }
    }

    // 3. 初始化结果矩阵元素为0
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            result[i][j] = 0;  // 将结果矩阵每个元素初始化为0
        }
    }

    // 4. 计算矩阵乘法
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            for (int p = 0; p < m; p++) {
                result[i][j] += matrixA[i][p] * matrixB[p][j];  // 根据矩阵乘法规则计算结果矩阵每个元素的值
            }
        }
    }

    // 5. 输出结果矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            printf("%d ", result[i][j]);  // 逐行逐列输出结果矩阵元素
        }
        printf("\n");
    }

    return 0;
}

C++ 语言代码

#include <iostream>
using namespace std;

int main() {
    int n, m, k;
    cin >> n >> m >> k;  // 输入矩阵A的行数n、列数m以及矩阵B的列数k

    int matrixA[n][m];  // 创建二维数组存储矩阵A的元素
    int matrixB[m][k];  // 创建二维数组存储矩阵B的元素
    int result[n][k];  // 创建二维数组存储矩阵相乘的结果,为n行k列

    // 1. 输入矩阵A的元素
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> matrixA[i][j];  // 逐行逐列输入矩阵A的元素
        }
    }

    // 2. 输入矩阵B的元素
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < k; j++) {
            cin >> matrixB[i][j];  // 逐行逐列输入矩阵B的元素
        }
    }

    // 3. 初始化结果矩阵元素为0
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            result[i][j] = 0;  // 将结果矩阵每个元素初始化为0
        }
    }

    // 4. 计算矩阵乘法
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            for (int p = 0; p < m; p++) {
                result[i][j] += matrixA[i][p] * matrixB[p][j];  // 按照矩阵乘法规则计算结果矩阵各元素值
            }
        }
    }

    // 5. 输出结果矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            cout << result[i][j] << " ";  // 逐行逐列输出结果矩阵元素
        }
        cout << endl;
    }

    return 0;
}

Java语言代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();  // 获取矩阵A的行数n
        int m = scanner.nextInt();  // 获取矩阵A的列数m
        int k = scanner.nextInt();  // 获取矩阵B的列数k

        int[][] matrixA = new int[n][m];  // 定义二维数组存储矩阵A的元素
        int[][] matrixB = new int[m][k];  // 定义二维数组存储矩阵B的元素
        int[][] result = new int[n][k];  // 定义二维数组存储矩阵相乘的结果,是n行k列

        // 1. 读取矩阵A的元素
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrixA[i][j] = scanner.nextInt();  // 逐行逐列读取矩阵A的元素并存入数组
            }
        }

        // 2. 读取矩阵B的元素
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < k; j++) {
                matrixB[i][j] = scanner.nextInt();  // 逐行逐列读取矩阵B的元素并存入数组
            }
        }

        // 3. 初始化结果矩阵元素为0
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < k; j++) {
                result[i][j] = 0;  // 将结果矩阵每个元素初始化为0
            }
        }

        // 4. 计算矩阵乘法
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < k; j++) {
                for (int p = 0; p < m; p++) {
                    result[i][j] += matrixA[i][p] * matrixB[p][j];  // 依据矩阵乘法规则计算结果矩阵各元素值
                }
            }
        }

        // 5. 输出结果矩阵
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < k; j++) {
                System.out.print(result[i][j] + " ");  // 逐行逐列输出结果矩阵元素
            }
            System.out.println();
        }
    }
}

Python语言代码

n, m, k = map(int, input().split())  // 获取矩阵A的行数n、列数m以及矩阵B的列数k
matrixA = [list(map(int, input().split())) for _ in range(n)]  // 获取矩阵A的元素,构建二维列表
matrixB = [list(map(int, input().split())) for _ in range(m)]  // 获取矩阵B的元素,构建二维列表

result = [[0] * k for _ in range(n)]  // 创建一个n行k列的二维列表,初始值都为0,用于存储结果矩阵

# 计算矩阵乘法
for i in range(n):
    for j in range(k):
        for p in range(m):
            result[i][j] += matrixA[i][p] * matrixB[p][j]  // 根据矩阵乘法规则计算结果矩阵各元素值

# 输出结果矩阵
for row in result:
    print(" ".join(map(str, row)))  // 将每行的整数列表转换为字符串,用空格连接后输出

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2253534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker更换容器存储位置

一&#xff1a;原因 今天之前在某个服务器上使用docker搭建的服务突然无法访问了&#xff0c;进入服务器查看发现服务运行正常&#xff0c;但是就是无法使用&#xff0c;然后我这边准备将docker服务重新启动下看看&#xff0c;发现docker服务无法重启&#xff0c;提示内存已满…

11.10VSCode配置 SSH连接远程服务器+免密连接教程

Jk200497 VScode通过remote ssh连接虚拟机 & 报错 过程试图写入的管道不存在&#xff08;已解决&#xff09;_连接虚拟机之后,提示管道错误,把上述路径加入到扩展中-CSDN博客 VSCode配置 SSH连接远程服务器免密连接教程

汽车EEA架构:架构的简介

1.架构的定义 汽车领域谈论的架构一词&#xff0c;来源于英文单词Architecture。在《系统架构:复杂系统的产品设计与开发》一书中对架构的定义如下:系统架构是一种概念的具象化&#xff0c;是物理或信息功能到形式元素的分配&#xff0c;是系统之内的元素之间的关系与周边环境…

Nginx下载、安装、启动及常用命令

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Mac快速安装 chromedriver驱动

全篇大概1200字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间5分钟。 什么是chromedriver&#xff1f; ChromeDriver 充当了 Selenium WebDriver 和 Chrome 浏览器之间的桥梁&#xff0c;允许开发者通过编程控制浏览器进行自动化测试或操作。 一、下载chromedriver…

大数据项目-Django基于聚类算法实现的房屋售房数据分析及可视化系统

《[含文档PPT源码等]精品Django基于聚类算法实现的房屋售房数据分析及可视化系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程课程答疑等&#xff01; 数据库管理工具&#xff1a;phpstudy/Navicat或者phpstudy/sqlyog 后台管理系统涉及技术&#xff1a; 后台使…

2024前端框架年度总结报告(二):新生qwik+solid和次新生svelte+Astro对比 -各自盯着前端的哪些个痛点 - 前端的区域发展差异

引言 2024年&#xff0c;前端开发依然是技术领域的热点之一。随着 Web 应用的日益复杂&#xff0c;前端框架的更新换代也加速了。尽管 React、Vue 和 Angular 老牌框架年度总结 等“老牌”框架仍然占据着主流市场&#xff0c;但一些新兴的框架在不断挑战这些“巨头”的地位&am…

MBox20边缘计算网关:氢能车间数据采集的智慧引擎

氢能作为未来能源体系的重要组成部分&#xff0c;其安全、高效、环保的特性备受瞩目。在氢能车间的日常运营中&#xff0c;数据采集是确保生产流程优化、设备稳定运行及能效提升的关键环节。然而&#xff0c;面对氢能车间复杂多变的生产环境和海量数据&#xff0c;如何实现高效…

【Linux篇】权限管理 - 用户与组权限详解

一. 什么是权限&#xff1f; 首先权限是限制人的。人 真实的人 身份角色 权限 角色 事物属性 二. 认识人–用户 Linux下的用户分为超级用户和普通用户 root :超级管理员&#xff0c;几乎不受权限的约束普通用户 :受权限的约束超级用户的命令提示符是#&#xff0c;普通用…

GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

EasyNVR中HTTP-FLV协议无法播放怎么解决?

在科技日新月异的今天&#xff0c;摄像头作为公共安全领域的重要一环&#xff0c;其技术的不断提升正显著地改变着社会的安全格局。从最初的简单监控到如今的高清智能分析&#xff0c;我们可以对特定区域进行实时监控和记录&#xff0c;为社会的安全稳定提供了强有力的保障。 问…

linux环境GitLab服务部署安装及使用

一、GitLab介绍 GitLab是利用Ruby onRails一个开源的版本管理系统&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开的或者私人项目。 二、GitLab安装 1、先安装相关依赖 yum -y install policycoreutils openssh-server openssh-clients postf…

视频码率到底是什么?详细说明

视频码率&#xff08;Video Bitrate&#xff09;是指在单位时间内&#xff08;通常是每秒&#xff09;传输或处理的视频数据量&#xff0c;用比特&#xff08;bit&#xff09;表示。它通常用来衡量视频文件的压缩程度和质量&#xff0c;码率越高&#xff0c;视频质量越好&#…

DICOM MPPS详细介绍

文章目录 前言一、常规检查业务流程二、MPPS的作用三、MPPS的原理1、MPPS与MWL2、MPPS服务过程 四、MPPS的实现步骤1、创建实例2、传递状态 五、总结 前言 医院中现有的DICOM MWL(Modality Worklist)已开始逐渐得到应用&#xff0c;借助它可以实现病人信息的自动录入&#xff0…

如何手搓一个智能激光逗猫棒

背景 最近家里的猫胖了&#xff0c;所以我就想做个逗猫棒。找了一圈市场上的智能逗猫棒&#xff0c;运行轨迹比较单一&#xff0c;互动性不足。 轨迹单一&#xff0c;活动范围有限 而我希望后续可以结合人工智能物联网&#xff0c;通过摄像头来捕捉猫的位置&#xff0c;让小…

「Mac畅玩鸿蒙与硬件42」UI互动应用篇19 - 数字键盘应用

本篇将带你实现一个数字键盘应用&#xff0c;支持用户通过点击数字键输入数字并实时更新显示内容。我们将展示如何使用按钮组件和状态管理来实现一个简洁且实用的数字键盘。 关键词 UI互动应用数字键盘按钮组件状态管理用户交互 一、功能说明 数字键盘应用将实现以下功能&…

泷羽sec-shell脚本(全) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

Unity 利用Button 组件辅助Scroll View 滚动

实现 创建枚举类ScrollDir 以区分滚动方向。每组两个按钮负责同方向上左右/上下滚动。 Update 中实时获取Scroll View 滚动条当前位置。 if (dir.Equals(ScrollDir.vertical)) {posCurrent scroll.verticalNormalizedPosition; } else if (dir.Equals(ScrollDir.horizontal)…

微服务搭建----springboot接入Nacos2.x

springboot接入Nacos2.x nacos之前用的版本是1.0的&#xff0c;现在重新搭建一个2.0版本的&#xff0c;学如逆水行舟&#xff0c;不进则退&#xff0c;废话不多说&#xff0c;开搞 1、 nacos2.x搭建 1&#xff0c;首先第一步查询下项目之间的版本对照&#xff0c;不然后期会…

小程序 - 计算器

小程序交互练习 - 计算器小程序 目录 计算器 功能描述 准备工作 创建项目 配置导航栏 创建utils目录 math.js文件内容 calc.js文件内容 页面内容 页面样式内容 页面脚本事件 功能截图 总结 计算器 在日常生活中&#xff0c;计算器是人们广泛使用的工具&#xff0…