索引到 CHOLMOD 密集向量数组
Indexing into CHOLMOD dense vector array
我有一个cholmod_dense数据结构:
cholmod_dense* ex = cholmod_l_solve(CHOLMOD_A, L, B, &com);
我想提取值并将它们复制到另一个变量。这意味着我需要索引到双精度数组并复制值。
for (int k=0; k<ncols; k++) T_x[k]=((double*)ex->x)[k];
编译器没问题,但我遇到了分段错误。或者我觉得我应该可以做到:
double* e_x =(double*)ex->x;
for (int k=0; k<ncols; k++) T_x[k]=*e_x[k];
但是编译器真的不喜欢这个:
error: invalid type argument of unary ‘*’ (have ‘double’)
for (int k=0; k<ncols; k++) T_x[k]= *e_x[k];
根据 CHOLMOD 用户指南:
- cholmod dense: A dense matrix, either real, complex or zomplex, in column-major order. This differs from the row-major convention used in C. A dense matrix X contains
• X->x, a double array of size X->nzmax or twice that for the complex case. • X->z, a double array of size X->nzmax if X is zomplex.
所以我应该能够简单地获取 ex->x 并将其作为双数组进行索引,但我无法在没有出现分段错误的情况下这样做。谁能帮帮我?
CHOLMOD 库是用 C 语言编写的,链接到 CHOLMOD 库的代码(上面显示的代码片段)是 C++。
好的,看来我犯了几个错误。
首先,我 运行 遇到了分段错误,因为我使用的 cholmod_l_zeros();
假设 long integers
。相反,我应该使用 cholmod_zeros();
因为我使用的是 doubles
.
修复此问题后,我 运行 在我的 cholmod_solve(CHOLMOD_A, L, B, &com);
语句之后立即进入错误 CHOLMOD error: invalid xtype
。这是因为我的 cholmod_factor* L
定义超出了范围。解决这两个问题后,代码成功地将值从 cholmod_dense ex->x double array
复制到我的 T_x double vector
:
cholmod_dense* ex = cholmod_solve(CHOLMOD_A, L, B, &com);
double* e_x = (double*)ex->x;
for (int k=0; k<ncols; k++) T_x[k] = e_x[k];
我也不知道 []
运算符会自动取消引用指针。很高兴知道!
我有一个cholmod_dense数据结构:
cholmod_dense* ex = cholmod_l_solve(CHOLMOD_A, L, B, &com);
我想提取值并将它们复制到另一个变量。这意味着我需要索引到双精度数组并复制值。
for (int k=0; k<ncols; k++) T_x[k]=((double*)ex->x)[k];
编译器没问题,但我遇到了分段错误。或者我觉得我应该可以做到:
double* e_x =(double*)ex->x;
for (int k=0; k<ncols; k++) T_x[k]=*e_x[k];
但是编译器真的不喜欢这个:
error: invalid type argument of unary ‘*’ (have ‘double’)
for (int k=0; k<ncols; k++) T_x[k]= *e_x[k];
根据 CHOLMOD 用户指南:
- cholmod dense: A dense matrix, either real, complex or zomplex, in column-major order. This differs from the row-major convention used in C. A dense matrix X contains • X->x, a double array of size X->nzmax or twice that for the complex case. • X->z, a double array of size X->nzmax if X is zomplex.
所以我应该能够简单地获取 ex->x 并将其作为双数组进行索引,但我无法在没有出现分段错误的情况下这样做。谁能帮帮我?
CHOLMOD 库是用 C 语言编写的,链接到 CHOLMOD 库的代码(上面显示的代码片段)是 C++。
好的,看来我犯了几个错误。
首先,我 运行 遇到了分段错误,因为我使用的 cholmod_l_zeros();
假设 long integers
。相反,我应该使用 cholmod_zeros();
因为我使用的是 doubles
.
修复此问题后,我 运行 在我的 cholmod_solve(CHOLMOD_A, L, B, &com);
语句之后立即进入错误 CHOLMOD error: invalid xtype
。这是因为我的 cholmod_factor* L
定义超出了范围。解决这两个问题后,代码成功地将值从 cholmod_dense ex->x double array
复制到我的 T_x double vector
:
cholmod_dense* ex = cholmod_solve(CHOLMOD_A, L, B, &com);
double* e_x = (double*)ex->x;
for (int k=0; k<ncols; k++) T_x[k] = e_x[k];
我也不知道 []
运算符会自动取消引用指针。很高兴知道!