4
行/矩陣的列我使用本徵和我有一個矩陣:隨機置換與本徵
MatrixXi x = MatrixXi::Random(5);
我想隨機置換行和使用隨機抽取排列列(對於行和列都只是一個置換),即如果我有一個發送索引[0,1,2,3,4] - > [3,4,2,1,0]的置換比我想重新排序行和具有相同排列的列。
第1部分:我在網上找不到PermutationMatrix的示例,並且在解析語法時遇到困難。
第2部分:如何獲得一個隨機置換的向量指數傳遞給它?也許std :: random_shuffle?
更新:
這裏是一個(可能是低效的)方式來獲得一個洗好的一組指標:
std::vector<int> perm;
for (int i=0; i<5; ++i) {
perm.push_back(i);
}
std::random_shuffle(perm.begin(), perm.end());
所以,現在的問題是,我該怎麼辦重新安排我的矩陣X,使得它的行/列按perm排序?
更新2:
越來越近了,這工作(的想法來源:cplusplus.com):
int myrandom (int i) { return std::rand()%i;}
PermutationMatrix<Dynamic,Dynamic> perm(5);
perm.setIdentity();
for (int i=dim-1; i>0; --i) {
swap (perm.indices()[i],perm.indices()[myrandom(i+1)]);
}
cout << "original x" << x << endl << endl;
cout << "permuted x" << perm * x * perm << endl << endl;
任何人都知道如何使用random_shuffle做到這一點? (見的嘗試未下面工作。)
(獎金:在燙髮* X *燙髮是否會有效的任何想法,如果燙髮是1E4 X 1E4矩陣?)
感謝ggael。這很接近,但是perm.indices()沒有迭代器AFAIK。我收到錯誤:'Eigen :: PermutationMatrix <-1, -1> :: IndicesType'沒有名爲'begin'的成員。我用一半的編輯來編輯我的問題,但據我可以告訴工作代碼,但我仍然想知道如何使用random_shuffle! – stackoverflax 2013-04-08 00:25:58
哎呀,我太快了,現在已經修正了。 – ggael 2013-04-08 11:26:32
對於在Google上發現此問題的任何人都會有相當的更新:如果您希望將相同的排列應用於行和列,則需要使用:'perm.transpose()* x * perm' – stackoverflax 2013-09-19 02:16:46