2017-03-10 2 views
0

위대한 매트릭스 서브 모듈 덕분에 Dlib을 사용하고 있습니다. 빠른 과학 알고리즘을 사용하는 것이 매우 완전하고 유용하다는 것을 알았습니다. 일부 사용자 지정 작업을 추가하고 어떻게 작동하는지 전반적인 아이디어를 얻을 수있었습니다.dlib의 matrix_exp를 std :: vector에 할당 할 수없는 이유는 무엇입니까?

그러나 꽤 오랜 시간 이후로 나를 귀찮게하는 질문이 있습니다. 어떤 종류의 행렬 표현식을 std::vector에 할당하는 것이 불가능 해 보이는 특별한 이유가 있습니까?

편집 : 여기

전형적인 dlib 기능입니다 :

template <typename EXP> 
const matrix_op<op_trans<EXP> > trans(const matrix_exp<EXP>& m) { 
    typedef op_trans<EXP> op; 
    return matrix_op<op>(op(m.ref()); 
} 

내가 걸리는 대신 std::vector을 반환 해당 기능을 구현하려면, 내가 할 것이라고 생각 :

template <typename EXP> 
const std::vector<matrix_op<op_trans<EXP> > > trans(const std::vector<matrix_exp<EXP> >& ms) { 
    std::vector<matrix_op<op_trans<EXP> > > out(ms.size()); 
    typedef op_resize_bilinear<EXP> op; 
    for (int i = 0; i < ms.size(); ++i) 
    out[i] = matrix_op<op>(op(ms.ref())); 
    return out; 
} 

그러나이 표현식은 matrix_expmatrix, matrix_op, matrix_add_exp ... 그러나 이것은 std::vector<matrix_exp>으로 사실이 아니다 :

‘const std::vector<smu::matrix<float> >’ is not derived from ‘const std::vector<smu::matrix_exp<EXP> >’

난 그냥 그것을 위해 어떤 이유가있는 경우 필요한 여러 가지 알고리즘에 유용 할 수 있기 때문에,이 dlib에서 의도적 있는지 알고 싶어요 한 번에 여러 행렬을 처리 할 수 ​​있습니다.이 문제를 해결할 수있는 작업이 있다면

+1

_ "std :: vector에 어떤 종류의 행렬 표현식도 할당 할 수없는 것처럼 보입니다"_ : 자세한 내용을 말하십시오. _ "최소한의 완전하고 검증 가능한 예제를 만드는 방법"_ : http://stackoverflow.com/help/mcve –

+1

이 기능을 구현 한 이유는 도서관 관리자에게 문의해야합니다. – Borgleader

+0

그래, 왜 그들이 도서관에서이 기능을 얻지 못했을까요? 나는 커다란 이슈를 보지 못했지만, 템플릿 표현 기술에 익숙하지 않았기 때문에 거대한 이유가 있다면, 나는 알고 싶었고 인터넷에서 비슷한 질문을 찾지 못했습니다. – baptiste

답변

1

(부인 : 처음으로 dlib을 처음 보았습니다. 어둠 속에서 촬영을하고 dlib/매트릭스 클래스는 실제로 작동합니다.)

dlib::matrix...

... 레이아웃이 row_major_layout 인 경우 행 주요 순서로 또는 레이아웃이 column_major_layout 인 경우 행 주요 순서로 반복합니다. std::vector에 할당

따라서 매우 간단 할 수 있습니다 : 그것은 당신이 정말로 우리에게 이야기하지 않았기 때문에 당신이, 내가 모르는 무엇을 찾고 있는지 여부

dlib::matrix<...> mat; 
// fill the matrix, do operations on it etc.  
std::vector<mat::type> vec(mat.begin(), mat.end()); 

. ;-)

+0

방금'matrix'가 아니라'matrix_exp'에 대해서 묻는 것을 보았습니다. 가장 잘 동작하는 C++ 데이터 컨테이너처럼, 주목할만한 것은'begin()'과'end()'를 가지고 있습니다. * "행의 주요 순서로 행렬 요소를 반복합니다."* – DevSolar

관련 문제