2011-08-26 2 views
2

부스트 :: 숫자 :: ublas 행렬에 레벨 1 블래스터를 어떻게 적용합니까? 예를 들어, 최대 항목 또는 모든 항목의 합을 계산하려고합니다. 행렬에 norm_1 또는 norm_inf를 사용하면 컴파일러 오류가 발생하지 않지만 임의의 결과를 반환합니다. 내가 부스트 1.42을 사용하고부스트 UBLAS blas-1을 행렬에 적용하십시오.

답변

3

norm_inf는 기본 벡터 공간에 무한 놈 의한 매트릭스 규범 induced를 계산한다. 이것은 행렬의 최대 절대 행 합계입니다.

한스의 예를 보면, 행렬의 마지막 행 (I = 99, J = 0 ... 99)을 포함

9900, 9901, 9902, ... , 9999 

만약를 그 항목을 요약하면 정확히 norm_inf이 생성하는 994950을 얻으십시오.

+0

알아두면 좋을 것 같습니다. 그것이 어딘가에 기록되어 있습니까? 나는 그것을 찾지 못했다. 모든 항목의 최대 값을 계산하는 방법을 알고 있습니까? 귀하의 게시물을 사용하여 그것은 재구성으로 할 수 있지만 조금 이상하게 보입니다. –

+0

@ Andreas : 행렬이 메모리에 연속적으로 배치되어 있다고 가정하면 (가능성이 있지만 uBLAS가 보장하는지 여부는 모르지만 다른 사람이 그 점에 대해 무게를 달아야 함), 아마도 벡터 객체를 구성 할 수 있습니다 같은 저장소에 의해 백업되고'norm_inf'가 호출됩니다. 추악하지만, 그것이 효과가있을 것이라고 상상해 봅니다. –

+0

아니요, 실제 문서를 찾을 수는 없지만 이해가되며 동작과 일치합니다. 간단한 검색은 실제로 uBLAS에 대한 많은 문서를 찾지 못했습니다. –

1

최소한의 예는 다음과 같습니다

#include<iostream> 
    #include<boost/numeric/ublas/matrix.hpp> 
    using namespace boost::numeric::ublas; 
    int main(){ 
      int l = 100; 
      matrix<double> m(l,l); 
      for (int i = 0; i < l; ++i) { 
        for (int j = 0; j < l; ++j) { 
          m(i,j)=i*l+j; 
        } 
      } 
      std::cout << norm_inf(m)<<std::endl; 
      return 0; 
    } 

그것은 99을 제공해야하지만, 수익률

이 994950. 적어도 주어진 과제를 해결하는 한 줄입니다 : 매트릭스에

float infnorm = accumulate(m.data().begin(),m.data().end(),0,std::max<double>); 
+0

나는 단선이 실제로 작동한다고 생각하지 않는다. 질문자는 최대 * 절대 * 항목을 원합니다. –

관련 문제