簡體   English   中英

從另一個子向量或子矩陣創建boost :: numeric :: ublas向量

[英]Creating boost::numeric::ublas vector from another subvector or submatrix

我正在嘗試從另一個子矩陣或子向量創建向量。 我嘗試了以下操作,但收到此錯誤error: no match for 'operator='

 int m_size = 10; 
 boost::numeric::ublas::matrix<double> u_a(m_size, m_size);
  boost::numeric::ublas::vector<double> u_v(m_size);

    for (int i = 0; i < m_size; i = i + 1 ){
        for (int j = 0; j < m_size; j++ ){
         double rand1 = (rand()%10+1) +  ((double) rand() / (RAND_MAX));
         u_a(i,j) = rand1;
    }
    double rand3 = (rand()%10+1) +  ((double) rand() / (RAND_MAX));
    u_v(i) = rand3;
    }

for (int i = 0; i < m_size; i = i + 1 ){
  boost::numeric::ublas::matrix<double> u_p(i, i);
  boost::numeric::ublas::vector<double> u_v2(i);
  u_p = subrange(u_a, 0, i, 0, i); 
  // I have tried following two   
  //u_v2 = subrange(u_a, 0,1,0,5);
  //u_v2 = subrange(u_v, 1,i); 
 }

此行的問題:

u_v2 = subrange(u_a, 0,1,0,5);

是矩陣的subrange是矩陣表達式,而不是向量表達式,並且您要分配給向量。 您可以使用免費的row()函數執行所需的轉換:

u_v2 = row(subrange(u_a, 0, 1, 0, 5), 0);

這行:

u_v2 = subrange(u_v, 1,i); 

編譯正常,但由於運行時錯誤而失敗。 這是因為在初始迭代中,請求的范圍從1變為0,這是無效的。 如果要從索引1開始的i - 1元素的子向量,可以這樣:

u_v2 = subrange(u_v, 1, 1 + i); 

住在CoLiRu

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM