0


c++矩阵——超实用的数据结构

文章目录

C++中的矩阵介绍

什么是矩阵?

矩阵是一个二维的数学结构,由行和列组成。在C++中,我们可以使用数组或者向量来表示矩阵。矩阵广泛应用于线性代数、图像处理、机器学习等领域。

C++中的矩阵表示

在C++中,我们可以使用数组来表示矩阵。例如,一个

     3 
    
   
     × 
    
   
     3 
    
   
  
    3×3 
   
  
3×3的矩阵可以表示为一个二维数组,如下所示:
int matrix[3][3]={{1,2,3},{4,5,6},{7,8,9}};

我们可以通过指定矩阵的行和列来访问特定的元素。例如,要访问矩阵的第二行第三列的元素,可以使用以下代码:

int element = matrix[1][2];// 第二行第三列的元素为6

除了使用数组,我们还可以使用向量来表示矩阵。向量是C++标准库中提供的容器,可以动态地调整大小。通过使用向量,我们可以更方便地进行矩阵操作。例如,要表示一个

     3 
    
   
     × 
    
   
     3 
    
   
  
    3×3 
   
  
3×3的矩阵,可以使用以下代码:
#include<vector>

std::vector<std::vector<int>> matrix ={{1,2,3},{4,5,6},{7,8,9}};

矩阵的运算

在C++中,我们可以对矩阵进行各种运算,包括加法、减法、乘法等。

矩阵加法

矩阵加法是指对两个矩阵对应位置的元素进行相加。例如,对于两个

     3 
    
   
     × 
    
   
     3 
    
   
  
    3×3 
   
  
3×3的矩阵 
 
  
   
   
     A 
    
   
  
    A 
   
  
A和 
 
  
   
   
     B 
    
   
  
    B 
   
  
B,它们的和矩阵C的第i行第j列的元素可以通过以下公式计算:


 
  
   
   
     C 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     = 
    
   
     A 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     + 
    
   
     B 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
  
    C[i][j] = A[i][j] + B[i][j] 
   
  
C[i][j]=A[i][j]+B[i][j]

矩阵减法

矩阵减法是指对两个矩阵对应位置的元素进行相减。例如,对于两个

     3 
    
   
     × 
    
   
     3 
    
   
  
    3×3 
   
  
3×3的矩阵 
 
  
   
   
     A 
    
   
  
    A 
   
  
A和 
 
  
   
   
     B 
    
   
  
    B 
   
  
B,它们的差矩阵 
 
  
   
   
     C 
    
   
  
    C 
   
  
C的第 
 
  
   
   
     i 
    
   
  
    i 
   
  
i行第 
 
  
   
   
     j 
    
   
  
    j 
   
  
j列的元素可以通过以下公式计算:


 
  
   
   
     C 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     = 
    
   
     A 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     − 
    
   
     B 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
  
    C[i][j] = A[i][j] - B[i][j] 
   
  
C[i][j]=A[i][j]−B[i][j]

矩阵乘法

矩阵乘法是指将一个矩阵的行与另一个矩阵的列进行乘法运算,并将结果相加。例如,对于一个

     m 
    
   
     × 
    
   
     n 
    
   
  
    m × n 
   
  
m×n的矩阵A和一个 
 
  
   
   
     n 
    
   
     × 
    
   
     p 
    
   
  
    n × p 
   
  
n×p的矩阵 
 
  
   
   
     B 
    
   
  
    B 
   
  
B,它们的乘积矩阵 
 
  
   
   
     C 
    
   
  
    C 
   
  
C的第 
 
  
   
   
     i 
    
   
  
    i 
   
  
i行第 
 
  
   
   
     j 
    
   
  
    j 
   
  
j列的元素可以通过以下公式计算:


 
  
   
   
     C 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     = 
    
   
     A 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     1 
    
   
     ] 
    
   
     ∗ 
    
   
     B 
    
   
     [ 
    
   
     1 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     + 
    
   
     A 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     2 
    
   
     ] 
    
   
     ∗ 
    
   
     B 
    
   
     [ 
    
   
     2 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     + 
    
   
     . 
    
   
     . 
    
   
     . 
    
   
     + 
    
   
     A 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     n 
    
   
     ] 
    
   
     ∗ 
    
   
     B 
    
   
     [ 
    
   
     n 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
  
    C[i][j] = A[i][1] * B[1][j] + A[i][2] * B[2][j] + ... + A[i][n] * B[n][j] 
   
  
C[i][j]=A[i][1]∗B[1][j]+A[i][2]∗B[2][j]+...+A[i][n]∗B[n][j]

矩阵转置

矩阵转置是指将矩阵的行和列互换。例如,对于一个m x n的矩阵A,它的转置矩阵B的第i行第j列的元素等于A的第j行第i列的元素:

     B 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     = 
    
   
     A 
    
   
     [ 
    
   
     j 
    
   
     ] 
    
   
     [ 
    
   
     i 
    
   
     ] 
    
   
  
    B[i][j] = A[j][i] 
   
  
B[i][j]=A[j][i]

这里是一道模板题:矩阵快速幂

题目链接
代码如下:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define For(i, a, b) for(int i = a;i <= b;i++)
typedef pair<int, int> PII;
const int N = 110;
const int P = 1e9 + 7;
int a[N][N], temp[N][N], n, k, res[N][N];
void mul(int a[][N], int b[][N]){
    For (i, 1, n){
        For (j, 1, n){
            temp[i][j] = 0;
            For (k, 1, n){
                temp[i][j] = (temp[i][j] + a[i][k] * b[k][j] % P) % P;
            }
        }
    }
}
void power(int b){
    For (i, 1, n){
        res[i][i] = 1;
    }
    for (; b; b >>= 1){
        if (b & 1){
            mul(res, a);
            memcpy(res, temp, sizeof res);
        }
        mul(a, a);
        memcpy(a, temp, sizeof a);
    }
}
signed main(){
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> n >> k;
    For(i, 1, n)
    {
        For(j, 1, n)
        {
            cin >> a[i][j];
        }
    }
    power(k);
    For(i, 1, n)
    {
        For(j, 1, n)
        {
            cout << res[i][j] % P << ' ';
        }
        cout << endl;
    }
    return 0;
}

AC图片:
在这里插入图片描述

总结

C++中的矩阵是一个重要的数学概念,在各种领域都有广泛的应用。我们可以使用数组或者向量来表示矩阵,并进行各种运算,如加法、减法、乘法和转置等。熟练掌握矩阵的表示和运算,对于理解和解决实际问题非常有帮助。

结语

今天的文章就到这里啦,三连必回qwq!

标签: c++ 矩阵 数据结构

本文转载自: https://blog.csdn.net/yzc_qiuse/article/details/134898689
版权归原作者 yzc_qiuse 所有, 如有侵权,请联系我们删除。

“c++矩阵——超实用的数据结构”的评论:

还没有评论