对RowVectorXd进行排序,并在新向量中返回索引



我试图按绝对值对RowVector进行排序,并按降序返回与无序向量对应的索引。因此,如果我有:x_rcv=(-2.5,3.9,1.5(,则oei(索引向量(应为:oei=(2,1,3(

所以我总是得到一个oei=(0,0,0,0,0,0(

OEI.cpp

#include "OEI.h"
#include <eigen3/Eigen/Dense>
#include <iostream>
#include <algorithm>
void OEI::calculateOEI(RowVectorXd &v)
{
std::sort(oei.data(), oei.data() + oei.size(), [&v](int i1, int i2)
{ return abs(v[i1]) < abs(v[i2]); });

std::cout << oei.size() << std::endl;
}

OEI.h

#include <eigen3/Eigen/Dense>
#include <iostream>
#include <algorithm>
using namespace Eigen;
class OEI
{
public:
int dim;
OEI(int dim) : dim(dim) { oei = RowVectorXd::Zero(dim); };
RowVectorXd oei;
public:
void calculateOEI(RowVectorXd &v);

};

main.cpp

int main(){
Encode vec(4, 4, 7);
awgn channel(7);
OEI errorvec(7);
vec.encodeDataVector();
cout << vec.x << endl;
channel.addGausian(vec.x);
cout << channel.x_rcv << endl;
errorvec.calculateOEI(channel.x_rcv);
cout << errorvec.oei << endl;
}

我只发布了不起作用的重要代码片段。如果你需要更多信息,请告诉我。

谢谢!

向量oei需要包含所有索引:

构造函数应该是:

OEI(int dim) : dim(dim) { 
oei = RowVectorXd::Zero(dim);
for (int i=0; i<dim; ++i) oei[i] = i;
};

要按降序排序,排序比较器应大于

std::sort(oei.data(), oei.data() + oei.size(), [&v](int i1, int i2)
{ return abs(v[i1]) > abs(v[i2]); });

最新更新