簡體   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