ハミングエラー修正コードを実装しようとしています。これを行うには、bool Vector (データ) を取得し、bool Matrix (ハミング生成行列) で乗算し、XOR 演算を実行する必要があります (OR のように見えるものの代わりに)。 Eigen のデフォルトの bool 動作)。私がやっていることの例は、この簡単なチュートリアルにあります: http://michael.dipperstein.com/hamming/
必ずしも Eigen を使用する必要はありません。解決策があれば、Eigen 以外のものを提案してください。
たとえば、コンパイルはできるが正しく動作しない C++ コードは次のようになります。
#include <Eigen/Dense>
#include <iostream>
using namespace std;
using namespace Eigen;
typedef Eigen::Matrix<bool, 4, 7> Matrix4by7Bool;
typedef Eigen::Matrix<bool, 1, 4> Vector4Bool;
int main()
{
Matrix4by7Bool gm;
gm << 0,1,1,1,0,0,0,
1,0,1,0,1,0,0,
1,1,0,0,0,1,0,
1,1,1,0,0,0,1;
Vector4Bool dm;
dm << 1,0,1,0;
cout << dm * gm;
}
現在の結果: 1 1 1 1 0 1 0
しかし、必要: 1 0 1 1 0 1 0
違いは、デフォルトの動作が乗算であり、次に各乗算を OR することです。OR ではなく XOR が必要なので、Eigen でこれを行う最善の方法は何ですか?
これが意味をなさない場合は、喜んで詳しく説明してください。
ところで、それが問題かどうかはわかりませんが、G ++を使用してMacBook Airに取り組んでいます。今日Eigenをダウンロードしたので、おそらく最新のものです(eigen3)
ありがとう、
キース
更新:以下の受け入れられた解決策を考えると、人々の参照として正しいコードを再投稿したかった:
#include <Eigen/Dense>
#include <iostream>
using namespace std;
using namespace Eigen;
typedef Eigen::Array<bool, 4, 7> Array4by7Bool;
typedef Eigen::Array<bool, 4, 1> Array1by4Bool;
struct logical_xor {
bool operator() (bool a, bool b) const
{
return a != b;
}
};
int main()
{
Array4by7Bool gm;
gm << 0,1,1,1,0,0,0,
1,0,1,0,1,0,0,
1,1,0,0,0,1,0,
1,1,1,0,0,0,1;
Array1by4Bool dm;
dm << 1,0,1,0;
cout << "result: " << (gm.colwise() * dm).colwise().redux(logical_xor()) << endl;
}