首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将双*一维矩阵转换为双** 2D方阵

问将双*一维矩阵转换为双** 2D方阵
EN

Stack Overflow用户
提问于 2015-04-07 18:26:20
回答 2查看 104关注 0票数 0

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

代码语言:javascript
复制
double *A1d;

您可能会假设这个数据结构是malloc'd,填充了双值,并且长度为MATRIX_SIZE * MATRIX_SIZE。

我希望将此数据结构转换为double**类型的二维方阵,其行/列长度为MATRIX_SIZE。

我在找这样的东西:

代码语言:javascript
复制
double** A2D = vector_to_matrix(int sz, double* matrix_1d); 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-07 18:26:20

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

假设您的1D矩阵具有正确的映射大小,下面的函数将完成此操作:

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2015-04-08 04:45:38

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29498573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档