gpt4 book ai didi

c++ - 索引到 CHOLMOD 密集 vector 数组

转载 作者:行者123 更新时间:2023-11-30 16:43:18 28 4
gpt4 key购买 nike

我有一个 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: 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 并将其作为 double 组进行索引,但我不能在没有段错误的情况下这样做。谁能帮帮我吗?

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

最佳答案

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

首先,我遇到了段错误,因为我使用的是cholmod_l_zeros();,它假定长整数。相反,我应该使用 cholmod_zeros(); 因为我使用的是 double

修复此问题后,我在 cholmod_solve(CHOLMOD_A, L, B, &com); 语句之后遇到了错误 CHOLMOD er​​ror: 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];

我也不知道 [] 运算符会自动取消引用指针。很高兴知道!

关于c++ - 索引到 CHOLMOD 密集 vector 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45362990/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com