2012-04-12 37 views
0

我正在將matlab代碼轉換爲C++代碼,並嘗試在Lapack,Blas甚至Atlas中找到一個函數,它在matlab中的Diag(k)函數中執行相同的工作?有什麼建議麼 ?在C++中,Diag(k)的替代方法是什麼?

+0

「'Diag(k)'」?你的意思是,從矢量創建一個對角矩陣還是任意矩陣對角線的提取作爲矢量? – leftaroundabout 2012-04-12 18:49:25

+0

...答案取決於你如何用C++表示矩陣和向量。特別是'k'的類型是什麼?無論哪種方式,你不需要Blas或Lapack(ATLAS只是這些的一個實現),因爲它只是一個簡單的循環索引:'for(i = 0; i sly 2012-04-12 20:15:48

回答

0
static void create_diagonal_matrix(T* matrix,T* v,int size) 
    { 
     for(int i=0;i<size;i++) 
     { 
      for(int32_t j=0;j<size;j++) 
      { 
       if(i==j) 
        matrix[j*size+i]=v[i]; 
       else 
        matrix[j*size+i]=0; 
      } 
     } 
    } 
0

GSL, the Gnu Scientific Library有一個功能gsl_matrix_diagonal (gsl_matrix * m)。這在矩陣中創建了一個「矢量視圖」,它或多或少是一個與矩陣對角線混疊的gsl矢量。不知道,如果你愛GSL,但它也包括BLAS支持。我認爲這是一個非常好的圖書館。

相關問題