索引到CHOLMOD密集向量数组

时间:2017-07-28 00:21:33

标签: c++ c arrays suitesparse

我有一个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 dense:以列为主的密集矩阵,无论是实数,复数还是复数。这与C中使用的行主要约定不同。密集矩阵X包含   •X-> x,大小为X-> nzmax的双阵列或复杂情况的两倍。 •X-> z,如果X是zomplex,则为X-> nzmax的双数组。
  2.   

所以我应该能够简单地抓取ex-&gt; x并将其作为双数组索引,但如果没有出现分段错误,我就无法这样做。任何人都可以帮助我吗?

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

1 个答案:

答案 0 :(得分:0)

好的,看起来好像我犯了几个错误。

首先,我遇到了分段错误,因为我使用的cholmod_l_zeros();假定为long integers。相反,我应该使用cholmod_zeros();,因为我使用的是doubles

修复此问题后,我在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];

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