将双**一维矩阵转换为双**二维方形矩阵

Convert a double* one-dimensional matrix to double** 2D square matrix

本文关键字:二维 方形矩 一维 转换 将双      更新时间:2023-10-16

我有一个矩阵的一维表示:类型

double *A1d;

您可以假设此数据结构为malloc'd,并填充有双值,长度为MATRIX_SIZE * MATRIX_SIZE

我想将此数据结构转换为具有行/列长度MATRIX_SIZEdouble**类型的二维方形矩阵

我正在寻找类似的东西:

double** A2D = vector_to_matrix(int sz, double* matrix_1d); 
double** vector_to_matrix(int sz, double* matrix_1d) {
  // The output 2d matrix to be returned.
  double** matrix_2d = (double**)malloc(sz * sizeof(double*));
  // Allocate memory.
  for (int i = 0; i < sz; i++)
    matrix_2d[i] = (double*)malloc(sz * sizeof(double));
  // Copy from 1d matrix.
  for (int i = 0; i < sz; i++)
    for (int j = 0; j < sz; j++) matrix_2d[i][j] = matrix_id[i * sz + j];
  return matrix_2d;
}

可以应用一个简单的算法将一维矩阵转换为二维方形矩阵。

假设1D矩阵的大小适合此映射,则以下函数将完成此操作:

double** vector_to_matrix(int sz, double* matrix_1d)
{
  double** matrix_2d;
  matrix_2d = (double**) malloc(sz*sizeof(double*));
  for (int k = 0; k < sz; k++) {
    matrix_2d[k] = (double*) malloc(sz*sizeof(double));
  }
  for (int i = 0; i < sz; i++) {
    for (int j = sz * i; j < sz * (i+1); j++) {
      matrix_2d[i][j%sz] = matrix_1d[j];
    }
  }
  return matrix_2d;
}