我想寫一個函數使用Eigen反轉對角線矩陣有點不同於平時。當對角元素爲零(或相對接近零)時,它應該將對角線元素的值設置爲零,否則值應該是1 /(對應元素)。我試着寫接收,我想顛倒對角矩陣的函數(它實際上是一個NX1矩陣,因此得名)和另一個指針,在這裏我想放的結果:如何使用特徵在函數中訪問/寫入矩陣?
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,j)或[i]訪問矩陣的元素,因爲我得到這個錯誤:
'operator []'不匹配(操作數類型是'Eigen :: EigenBase >'和'int') res(i,i)=(sing_val_vector [i] < 0.0000001-0:1/sing_val_vector [i]);
沒有匹配關於 '操作符[]'(操作數的類型是 '本徵:: EigenBase>' 和 'INT') RES(I,I)=(sing_val_vector [I] < 0.0000001?0:1/sing_val_vector [一世]);
敵不過調用 '(本徵:: EigenBase>)(INT &,整數&)' RES(I,I)=(sing_val_vector [I] < 0.0000001?0:1/sing_val_vector [I]) ;
當我調用該函數是這樣的:
invertSingularValues(S.data,S_inv);
S.data和S_inv是本徵矩陣。 我能做什麼?