我有一个矩阵的一维表示:类型
double *A1d;
您可以假设此数据结构为malloc'd
并填充了双精度值,长度为MATRIX_SIZE * MATRIX_SIZE
。
我想将此数据结构转换为double**
类型的二维方阵,行/列长度为MATRIX_SIZE
我正在寻找类似的东西:
double** A2D = vector_to_matrix(int sz, double* matrix_1d);
答案 0 :(得分:1)
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 :(得分:0)
可以应用简单的算法将一维矩阵转换为二维方阵。
以下函数将完成此操作,假设您的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;
}