대각선 행렬을 평소와 조금 다른 것으로 바꾸는 Eigen을 사용하여 함수를 작성하려고합니다. 대각선 요소가 0이거나 상대적으로 0에 가까울 경우 대각 요소의 값을 0으로 설정해야하지만 그렇지 않은 경우 값은 1/(해당 요소)이어야합니다. I는 I가 반전 할 대각 행렬을 수신하는 기능을 작성하려고 I의 결과에 넣고 싶은 다른 포인터 (이것은 실제로 NX1 행렬, 따라서 이름이다)Eigen을 사용하여 함수에서 행렬에 액세스/쓰는 방법?
template <typename m1, typename m2>
void invertSingularValues(Eigen::EigenBase<m1>& sing_val_vector,Eigen::EigenBase<m2>& res)
{
for (int i=0; i<sing_val_vector.rows();i++)
res(i,i)=(sing_val_vector[i]<0.0000001?0:1/sing_val_vector[i]);
};
그것은 I는 (I, J) 또는를 사용하여 행렬 요소를 액세스 할 수없는 것으로 보인다 [I]는 I이 에러를 얻을 같이
피연산자 타입 '아이겐 :: EigenBase있다 ("[] 운영자에 대한 일치하지 > '및'int ') res (i, i) = (sing_val_vector [i] < 0.0000001? 0 : 1/sing_val_vector [i]);
RES (I, I) = (sing_val_vector [I] < 0.0000001 0 (피연산자 타입 '아이겐 :: EigenBase>'과 '내부'임) '[] 운영자'에 대한 매치 : 1/sing_val_vector [ 나는]);
'(아이겐 :: EigenBase>) (&을 INT, &을 INT)' 입술에 호출없이 매치 (I, I) = (sing_val_vector [I] < 0.0000001 0 : 1/sing_val_vector [I]) ;
invertSingularValues(S.data,S_inv);
S.data 및 S_inv은 아이겐 행렬은 다음과 같습니다
나는이 같은 함수를 호출
. 어떻게해야합니까?