加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 海宁网 (https://www.hainingwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

矩阵 稀疏矩阵 的转置算法 C语言 说明

发布时间:2022-07-07 16:37:48 所属栏目:编程 来源:互联网
导读:矩阵(包括稀疏矩阵)的转置,即互换矩阵中所有元素的行标和列标, 矩阵转置的实现思路是:不断遍历存储矩阵的三元组表,每次都取出表中 j 列最小的那一个三元组,互换行标和列标的值,并按次序存储到一个新三元组表中,。 例如,将图 2a) 三元组表存储的矩
  矩阵(包括稀疏矩阵)的转置,即互换矩阵中所有元素的行标和列标, 
 
  矩阵转置的实现思路是:不断遍历存储矩阵的三元组表,每次都取出表中 j 列最小的那一个三元组,互换行标和列标的值,并按次序存储到一个新三元组表中,。
 
  例如,将图 2a) 三元组表存储的矩阵进行转置的过程为:
  新建一个三元组表(用于存储转置矩阵),并将原矩阵的行数和列数互换赋值给新三元组;
  遍历三元组表,找到表中 j 列最小值 1 所在的三元组 (3,1,6),然后将其行标和列标互换后添加到一个新的三元组表中, 
 
  继续遍历三元组表,找到表中 j 列次小值为 2 的三元组,分别为 (1,2,1)、(2,2,3) 和 (3,2,5),根据找到它们的先后次序将各自的行标和列标互换后添加到新三元组表中, 
 
  因此,矩阵转置的 C 语言实现代码为:
  #include<stdio.h>
  #define number 10
  typedef struct {
      int i, j;
      int data;
  }triple;
  typedef struct {
      triple data[10];
      int n, m, num;
  }TSMatrix;
  TSMatrix transposeMatrix(TSMatrix M, TSMatrix T) {
      T.m = M.n;
      T.n = M.m;
      T.num = M.num;
      if (T.num) {
          int q = 0;
          for (int col = 1; col <= M.m; col++) {
              for (int p = 0; p < M.num; p++) {
                  if (M.data[p].j == col) {
                      T.data[q].i = M.data[p].j;
                      T.data[q].j = M.data[p].i;
                      T.data[q].data = M.data[p].data;
                      q++;
                  }
              }
          }
      }
      return T;
  }
  int main() {
      TSMatrix M;
      M.m = 2;
      M.n = 3;
      M.num = 4;
      M.data[0].i = 1;
      M.data[0].j = 2;
      M.data[0].data = 1;
      M.data[1].i = 2;
      M.data[1].j = 2;
      M.data[1].data = 3;
      M.data[2].i = 3;
      M.data[2].j = 1;
      M.data[2].data = 6;
      M.data[3].i = 3;
      M.data[3].j = 2;
      M.data[3].data = 5;
      TSMatrix T;
      for (int k = 0; k < number; k++) {
          T.data[k].i = 0;
          T.data[k].j = 0;
          T.data[k].data = 0;
      }
      T = transposeMatrix(M, T);
      for (int i = 0; i < T.num; i++) {
          printf("(%d,%d,%d)n", T.data[i].i, T.data[i].j, T.data[i].data);
      }
      return 0;
  }
  程序运行结果为:
  (1,3,6)
  (2,1,1)
  (2,2,3)
  (2,3,5)

(编辑:财气旺网 - 海宁网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!