在我正在研究的項目中的一個函數中,我需要在除以給定數字時查找我的特徵庫矩陣的每個元素的其餘部分。這裏是Matlab相當於我想要做的:特徵矩陣庫係數模運算
mod(X,num)
其中X是除數矩陣和num是除數。
實現此目的的最簡單方法是什麼?
在我正在研究的項目中的一個函數中,我需要在除以給定數字時查找我的特徵庫矩陣的每個元素的其餘部分。這裏是Matlab相當於我想要做的:特徵矩陣庫係數模運算
mod(X,num)
其中X是除數矩陣和num是除數。
實現此目的的最簡單方法是什麼?
可以使用C++ 11拉姆達與unaryExpr
:
MatrixXi A(4,4), B;
A.setRandom();
B = A.unaryExpr([](const int x) { return x%2; });
或:
int l = 2;
B = A.unaryExpr([&](const int x) { return x%l; });
謝謝,那有效:) – pincir
爲了完整起見,另一種解決方案將是:
a%b = a - (b * int(a/b))
C++代碼,返回一個本徵數組:
auto mod_array = X.array() - (num * (X.array()/num));
C++代碼來獲得的矩陣:
auto mod_matrix = (X.array() - (num * (X.array()/num))).matrix();
注意,括號是重要,特別是在(X.array()/num)
作爲本徵將優化(num * X.array()/num)
到X.array()
這不是我們所期望的。
特徵數組的第一個版本比使用unaryExpr的版本更快。 矩陣的第二個版本與unaryExpr的版本大致相同。
如果X包含浮點數,則需要在(X.array()/num)
投X.array()
爲int
退房http://arma.sourceforge.net/他們與你想和什麼方法做一個好的圖書館從matlab轉換的指南。 – Jacobr365
我過去使用過犰狳,但我想嘗試Eigen這個項目。 Eigen有沒有辦法做到這一點? – pincir
不是我所知道的。您可以使用特徵中的其他函數編寫自己的mod函數,以獲得與mod() – Jacobr365