繁体   English   中英

索引到CHOLMOD密集向量数组

[英]Indexing into CHOLMOD dense vector array

我有一个cholmod_dense数据结构:

cholmod_dense* ex = cholmod_l_solve(CHOLMOD_A, L, B, &com);

我想提取值并将其复制到另一个变量。 这意味着我需要索引到double数组中并复制值。

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用户指南:

  1. cholmod密集:以列为主的密集实数矩阵,复数矩阵或zomplex矩阵。 这与C语言中使用的行优先约定不同。密集矩阵X包含•X-> x,大小为X-> nzmax的双精度数组,或者是复杂情况的两倍。 •X-> z,如果X是zomplex,则为大小为X-> nzmax的双精度数组。

因此,我应该能够简单地获取ex-> x并将其索引为双精度数组,但是如果没有分段错误,我将无法做到这一点。 谁能帮我吗?

CHOLMOD库是用C编写的,链接到CHOLMOD库的代码(上面显示的代码段)是c ++。

好的,看来我犯了一些错误。

首先,因为使用cholmod_l_zeros();所以我cholmod_l_zeros();了分段错误cholmod_l_zeros(); 假定long integers 相反,我应该使用cholmod_zeros(); 因为我正在使用doubles

解决此问题后,我遇到了错误CHOLMOD error: invalid xtype我的cholmod_solve(CHOLMOD_A, L, B, &com);之后cholmod_solve(CHOLMOD_A, L, B, &com); CHOLMOD error: invalid xtype cholmod_solve(CHOLMOD_A, L, B, &com); 声明。 这是因为我的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];

我也没有意识到[]运算符会自动取消引用指针。 很高兴知道!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM