矩阵乘法(C++)

这篇具有很好参考价值的文章主要介绍了矩阵乘法(C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述:

Alice在学线性代数。她觉得线代的计算特别麻烦,于是就来找你,希望你可以给她写一个程序计算两个矩阵的乘积。

矩阵乘法介绍: 矩阵A是一个N行P列的矩阵。 矩阵B是一个K行M列的矩阵。 当P=K时,A和B可以相乘(仅限于AB, BA不一定可行) 假设矩阵C=AB,那么C**i,j​=∑t=1P(或K)​A**i,t​∗B**t,j

举个例子,假设A是一个2×3的矩阵,B是一个3×2的矩阵,最终结果C是一个2×2的矩阵,如下图所示

c++矩阵乘法,c++

输入格式:

输入共一行,有三个整数N,P,M(N,P,M≤100)。表示矩阵A是一个N×P的矩阵,矩阵B是一个P×M的矩阵。

接下来N行,每行P个整数,读入矩阵A。

再接下来P行,每行M个整数,读入矩阵B。

数据保证在输入输出数据可以用int类型存储。

输出格式:

输出N行M列的矩阵C。每行最后一个数后面有一个空格。

输入样例:

在这里给出一组输入。例如:

3 3 3
1 3 2
1 0 0
1 2 2
0 0 2
7 5 0
2 1 1

输出样例:

在这里给出相应的输出。例如:

25 17 4 
0 0 2 
18 12 4 

解题思路:

采用IPO思路实现功能:

题目大意:对于A矩阵的一行,去乘以B矩阵的每一列,分别做和,得到C矩阵的一行元素

结果是A矩阵与C矩阵行数相同,B矩阵与C矩阵列数相同

创建A、B、C三个二维数组,和一个num数组用来存储A、B的乘积

(1)I:

输入N,P,M三个整数

(2)P:

解题的关键在于理解行标和列标的循环关系,所以在这里先说明几个关系:

A矩阵每变化一行,B矩阵变化一周;

即A矩阵的行标变化一次,B矩阵的列标变化一周;

而B矩阵的列标每变化一次,行标需要变化一周;

又因为B矩阵的行标即为A矩阵的列标,故A矩阵的列标也需要变化一周;

至此,循环关系明确:

第一层:A矩阵行标

第二层:B矩阵列标

第三层:B矩阵行标和A矩阵列标,二者其实是一个标记物

第三层每轮循环结束,将结果存入num数组

(3)O:

逻辑上输出C矩阵即可;

代码实现如下文章来源地址https://www.toymoban.com/news/detail-783482.html

#include <iostream>
using namespace std;
​
int A_matrix[100][100] = { 0 };//A矩阵
int B_matrix[100][100] = { 0 };//B矩阵
int num_array[100 * 100] = { 0 };//存储第三层每一轮运算结果
​
int main()
{
    int N, P, M;
    cin >> N >> P >> M;//表示矩阵A是一个N×P的矩阵,矩阵B是一个P×M的矩阵,矩阵C是一个N×M的矩阵
    for (int i = 0; i < N; i++)//读入A矩阵
    {
        for (int j = 0; j < P; j++)
        {
            cin >> A_matrix[i][j];
        }
    }
    for (int i = 0; i < P; i++)//读入B矩阵
    {
        for (int j = 0; j < M; j++)
        {
            cin >> B_matrix[i][j];
        }
    }
    int index = 0;//num数组下标
    for (int a = 0; a < N; a++)//a为A矩阵的行标
    {
        for (int b = 0; b < M; b++)//b为B矩阵的列标
        {
            for (int c = 0; c < P; c++)//c为B矩阵的行标、A矩阵的列标
            {
                num_array[index] += A_matrix[a][c] * B_matrix[c][b];
            }
            index++;
        }
    }
    for (int i = 1; i <= N * M; i++)//输出C矩阵
    {
        cout << num_array[i - 1] << ' ';
        if (i % M == 0)//每输出一行,换行
        {
            cout << endl;
        }
    }
    return 0;
​
}

到了这里,关于矩阵乘法(C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python矩阵乘法全面解读,python矩阵乘法常用代码

      矩阵乘法,顾名思义是矩阵的乘法,矩阵相乘的含义是两个向量的积,在 Python中一般以乘号或括号表示。与常用的加、减、乘、除运算不同,矩阵乘法只能用于对给定矩阵进行乘法运算,不能进行除法运算。若要计算矩阵乘法的值,必须先进行矩阵分解。 在上一篇文章中

    2024年02月08日
    浏览(38)
  • 矩阵乘法(矩阵乘矩阵)

    首先理了解矩阵是什么: 矩阵是一个按照长方阵列排列的复数或实数集合。(相信大家都懂) 关于矩阵的基本概念: 1.方阵:n 阶方阵 (正方形嘛) 2.同型矩阵:两个矩阵,行数与列数对应相同,称为同型矩阵 矩阵加减法: 在了解矩阵乘法前先看看矩阵加减法: 1.两个矩阵

    2024年02月08日
    浏览(51)
  • 矩阵的秩c++

    最简单的理解方式,线性方程组中线性独立的方程的个数。也就是高斯消元之后,剩下的防尘组的个数,就是剩下的约束条件的个数。 cpp 代码

    2024年02月12日
    浏览(36)
  • 打印螺旋矩阵C++

    题目 对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。 例如,一个 4 行 5 列的螺旋矩阵如下: 输入描述 输入两个整数 n、 m,分别表示螺旋矩阵的行数和列数。 输出描述 输出一个n行m列的螺旋矩阵。 输入样例

    2024年02月11日
    浏览(34)
  • 矩阵基本运算(C++)

    闲着没事,将以前利用C++实现的矩阵各种运算整理了一下,分享一下,矩阵运算包括: 1、二维矩阵创建                                        6、两矩阵上下叠加 2、两矩阵相加                                           7、矩阵左右叠加 3、两矩阵

    2023年04月09日
    浏览(33)
  • 子矩阵(c++实现)

    给定一个 n×m (n 行 m 列)的矩阵。 设一个矩阵的价值为其所有数中的最大值和最小值的乘积。 求给定矩阵的所有大小为 a×b (a 行 b 列)的子矩阵的价值的和。 答案可能很大,你只需要输出答案对 998244353 取模后的结果。 输入 输入的第一行包含四个整数分别表示 n,m,a,b,相

    2024年04月17日
    浏览(26)
  • 矩阵的c++实现(2)

    上一次我们了解了矩阵的运算和如何使用矩阵解决斐波那契数列,这一次我们多看看例题,了解什么情况下用矩阵比较合适。 先看例题 模板题应该很简单。 补:1n=10^9 10^9肯定超了,所以可以用矩阵做 我们可以观察到,每一项(x3)都是由两个量组成,于是创建矩阵: 同时:

    2024年02月08日
    浏览(29)
  • 矩阵算法之矩阵乘法

    矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。 在矩阵乘法中,A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。 运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。 1、当矩阵A的列数(column)等于矩阵

    2024年02月11日
    浏览(38)
  • 计算矩阵边缘元素之和(c++)

    输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。 第一行分别为矩阵的行数  和列数 (m100,n100),两者之间以一个空格分开。 接下来输入的  行数据中,每行包含  个整数,整数之间

    2024年01月22日
    浏览(32)
  • C++ 构造0-1随机矩阵

    沿用传统C语言的构造方法,使用双重for循环。 输出结果: srand() 用于初始化随机数发生器,包含于 stdlib.h 头文件,用于设置 rand() 的随机数种子 seed ,原型为 void srand(unsigned seed) 。 rand() 是随机数发生器,包含于 stdlib.h 头文件,可根据当前的 seed 返回均匀分布的介于 0 和

    2024年02月06日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包