zoukankan      html  css  js  c++  java
  • 实现两个N*N矩阵的乘法,矩阵由一维数组表示

    实现两个N*N矩阵的乘法,矩阵由一维数组表示。

    先介绍一下矩阵的加法:

    1     void Add(int rows, int cols)  
    2     {  
    3        for(int i= 0;i<rows;i++)  
    4        {  
    5        for(int j=0;j<cols;j++)  
    6           result[i][j]=mat1[i][j]+mat2[i][j];  
    7        }  
    8     } 

    若两个矩阵要做乘法运:只有在一个矩阵的行数与另一个矩阵的列数相同时,才能做两个矩阵的乘法。

    如何得到矩阵的转置

    矩阵的转置也是一个矩阵,原始矩阵中的行转变为转置矩阵的列。例如,有下述一个3×3矩阵:

    1 2 3
    6 7 8
    4 5 9

    那么它的转置矩阵为:

    1 6 4
    2 7 5
    3 8 9

    让我们从程序员的角度仔细地考察一下这一现象。假设原始数组为M,转置矩阵为MT。那么M[1][0]=6,在转置矩阵中我们发现MT [0][1]=6。因此,我们能够得到程序化的结论:转置一个矩阵实际上就是对换下标变量。用技术术语讲:

    1. MT[Row][Column] = M[Column][Row]; 

    下面是得到转置矩阵的C代码:

    1. void show_transpose(float mat[][10],int row,int col)  
    2. {  
    3.    int i,j;  
    4.    for(i=0;i<row;i++)  
    5.    {  
    6.       for(j=0;j<col;j++)  
    7.          printf("%f ",mat[j][i]);  
    8.       printf(" ");  
    9.    }  

    这个方法显示了矩阵的转置。

      1. #include<iostream>  
      2. using namespace std;  
      3. #define size 2  
      4.   
      5. int multi(int *a , int *b , int N)  
      6. {  
      7.     int i , j , k , temp;  
      8.     int *c = (int*)malloc(N * N);  
      9.     for(i = 0 ; i < N ; i++)  
      10.     {  
      11.         for(j = 0 ; j < N ; j++)  
      12.         {  
      13.             temp = i * N + j;  
      14.             *(c + temp) = 0;  
      15.             for(k = 0 ; k < N ; k++)  
      16.             {  
      17.                 *(c + temp) += a[i * N + k] * b[k * N + j];  
      18.             }  
      19.             cout<<*(c + temp)<<" ";  
      20.         }  
      21.     }  
      22.     return *c;  
      23. }  
      24.   
      25. int main()  
      26. {  
      27.     int a[size * size] = {2 , 1 , 4 , 3};  
      28.     int b[size * size] = {1 , -1 , 3 , 2};  
      29.     multi(a , b , size);  
      30.   
      31.     return 0;  
      32. }
  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3262069.html
Copyright © 2011-2022 走看看