2016-07-14 3 views
0

동등한 matlab 연산 H = (K*W)>0; (자세한 내용은 this 질문 참조) 결과로 Eigen::Matrix<bool,Dynamic,Dynamic> H (p,b)이 있습니다.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; 
} 
관련 문제