我试图按绝对值对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]); });