[英]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用戶指南:
- 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.