2016-06-15 5 views
0

다른 서브 매트릭스 또는 서브 벡터로부터 벡터를 생성하려고합니다. 나는 다음과 같은 시도했지만이 오류를 error: no match for ‘operator=’다른 서브 벡터 또는 서브 매트릭스에서 boost :: numeric :: ubas 벡터 생성하기

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); 
} 
+0

당신은 [MCVE] (http://stackoverflow.com/help/mcve를 게시 할 수) 컴파일러와 Boost 버전을 지정 하시겠습니까? Boost 1.59가 적용된 코드는 [CoLiRu] (http://coliru.stacked-crooked.com/a/0b086dbf82dcf2f9)에서 작동합니다. – rhashimoto

+0

리눅스에서 gcc 4.8이고 부스트가 1.54 인 마지막 두 줄 중 하나의 주석 처리를 해제해야합니다. – asdfkjasdfjk

답변

1

이 라인에 문제 얻을 수있다 :

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

매트릭스의 subrange는 매트릭스 표현이 아닌 벡터 표현이다, 그리고 당신이 할당된다 벡터에.

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

이 행 :

u_v2 = subrange(u_v, 1,i); 

잘 컴파일하지만 런타임 오류와 함께 실패 당신이 원하는 변환을 수행 할 수 row() 무료 기능을 사용할 수 있습니다. 이는 초기 반복에서 요청 된 범위가 1에서 0으로 변경되어 유효하지 않기 때문입니다. 당신이 인덱스 1에서 시작 i - 1 요소의 서브 벡터를 원한다면, 당신은 이런 식으로 할 것 :

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

Live at CoLiRu

+0

''u_v2 = subrange (u_v, 1, 1 + i); '여전히 오류가 발생했습니다 : error : no matching 함수 호출 '하지만 첫 번째 솔루션은 위대한 일하고있다. – asdfkjasdfjk

+0

내가 가진 가장 오래된 버전은 g ++ 4.9.2 및 부스트 1.55이며 작동합니다. Boost에 대한 [버전 기록] (http://www.boost.org/users/history/)에는 1.55에 대한 uBLAS에 대한 업데이트가 표시되지 않습니다. 1.54 버전의 문서에는 벡터 범위의 ['subrange()'자유 함수] (http://www.boost.org/doc/libs/1_54_0/libs/numeric/ublas/doc/vector_proxy.htm#11SimpleProjections)가 포함되어 있습니다. . 컴파일러 버그 일 수 있습니다. – rhashimoto

+0

[my CoLiRu] (http://coliru.stacked-crooked.com/a/c31097f83085f349)의 축 어적 코드를 사용하고 있습니까? – rhashimoto