2017-03-18 10 views
1

에 희소 행렬 (1) 규범, Inf를-표준을 계산하기 위해, 나는 방문자 내가 그들의 1 규범을 계산하기 위해 효율적으로 사용할 수있는 조밀 한 Eigen::Matrix 클래스 감소이 있다는 것을 알고 , INF-규범, 이런 어떻게든지 등 는 : 효율적인 방법은 아이겐 라이브러리에서 아이겐

Eigen::MatrixXd A; 
... 
A.colwise().lpNorm<1>().maxCoeff(); 
A.rowwise().lpNorm<1>().maxCoeff(); 
// etc. 

는 이제 스파 스 Eigen::SparseMatrix 클래스가 있습니다. 이 경우이 규범을 어떻게 효과적으로 계산할 수 있습니까?

답변

0

당신은 사람의 벡터로 제품을 사용하여 colwise/rowwise 1 표준을 계산할 수 있습니다 :

(Eigen::RowVectorXd::Ones(A.rows()) * A.cwiseAbs()).maxCoeff(); 
(A.cwiseAbs() * Eigen::VectorXd::Ones(A.cols()).maxCoeff(); 

이 충분히 목적을 위해 최적화됩니다 있는지 확인하기 위해 생성 된 어셈블리를 확인합니다. 그렇지 않은 경우 또는 다른 lpNorm이 필요할 경우 스파 스 반복자가있는 두 개의 중첩 루프를 작성해야 할 수 있습니다.