C プログラミング言語での amxn 実数行列の最適な表現を知りたいです。
単一のポインタとしての行列表現の利点は何ですか:
double* A;
この表現を使用すると、メモリを割り当てることができます。
A = (double* )malloc(m * n * sizeof(double));
このような表現では、行列へのアクセスには追加の乗算が必要です。
aij = A[i * m + j];
ダブルポインターとしての行列表現の欠点は何ですか:
double** B;
メモリ割り当てにはループが必要です。
double** B = (double **) malloc(m * sizeof(double*));
for (i = 0; i < m; i++)
A[i] = (double *) malloc(n * sizeof(double))
このような表現では、直感的なダブル インデックス `bij = B[i][j] を使用できますが、パフォーマンスに影響するいくつかの欠点があります。パフォーマンスの点で最高のプレゼンテーションは何か知りたいです。
これらの行列は、特異値分解などの数値アルゴリズムで使用する必要があります。関数を定義する必要があります。
void svd(Matrix A, Matrix U, Matrix Sigma, Matrix V);
マトリックスを表現する最良の方法を探しています。C で行列を表現する効率的な方法が他にある場合は、お知らせください。
ほとんどの人が単一のポインター表現を使用していることを見てきました。二重配列表現とは対照的に、パフォーマンス上の利点があるかどうかを知りたいですか?