2016-07-14 11 views
0

同等のmatlab操作H = (K*W)>0;の結果としてEigen::Matrix<bool,Dynamic,Dynamic> H (p,b)があります(詳細はthis質問を参照してください)。Eigenとstd :: bitsetによるハミング距離

ただし、Hの各行とベクトルvのハミング距離を計算する必要があります。 std::bitsetab(a^b).count()の間で計算するのは簡単で速いので、H = (K*W)>0;を実装することが可能かどうかは、HEigen::Array<std::bitset,Dynamic,1>です。代替案として

readingこの質問私はEigen::Matrix<bool,Dynamic,Dynamic> H (p,b)ためredux()を使用することができます感を持っていますが、私はあなたがカスタマイズしたとしてstd::bitsetを治療するための必要があるとして、困難なことができstd::bitsetを使用してリダクション機能

答えて

0

を定義する方法を見つけ出すことはできませんスカラー型を定義し、その上にスカラー演算を定義します。ここで.count()std::bitset::count()より遅いかもしれないが一方

https://eigen.tuxfamily.org/dox/TopicCustomizingEigen.html#CustomScalarType

ハミング距離は、容易です。

#include <iostream> 
#include <Eigen/Eigen> 
using namespace Eigen; 

int main() { 
    const int p = 5; 
    const int b = 10; 
    Eigen::Matrix<bool, Dynamic, Dynamic> H(p, b); 
    Eigen::Matrix<bool, 1, Dynamic> V(b); 
    H.setRandom(); 
    V.setRandom(); 

    std::cout << "H:\n" << H << std::endl; 
    std::cout << "V:\n" << V << std::endl; 
    std::cout << "distance(H, V):\n" 
     << (H.array() != V.replicate(p, 1).array()).rowwise().count() 
     << std::endl; 
    return 0; 
} 
関連する問題