2017-01-30 3 views
0

는, 나는 컨테이너에 일부 데이터를 기록하는 데 필요한거야.Eigen :: Vector 대 std :: vector를 사용하는 경우는? 때문에 외부 종속성의

는 그러나, 나는 컨테이너로 ko를 사용하지 않아도있어하는 다른 시간이 있고, 나는 표준 std::vector<int>

가 현재 내 코드를 뿌려 Eigenstd 벡터를 사용할 수 있습니다. std:vector을 사용하기로 결정한 유일한 경우는 크기 조정 및 다시 삽입이 사용하는 것보다 더 지루하고 (또한 계산 상 비싸기 때문에) 즉시 삽입을 할 때입니다. push_back(<value>)

확실하게 알고 싶습니다. 나는 무작위로 선택하는 대신 적절한 시간에 하나 또는 다른 것을 사용하고있다. std::vector 대신 Eigen::Vector을 사용할 올바른 인스턴스는 무엇입니까? 아이겐에서

답변

0

수업은 수학적 대상을 나타냅니다. 이 경우 행렬 또는 스칼라 곱셈과 같은 곱셈과 같이 벡터에 대한 모든 일반적인 연산이있는 수학적 벡터입니다.

표준 : 벡터 공간에서 연속 데이터의리스트를 저장하는, 본질적으로 (동적) 배열이다. 일반적인 작업은 데이터를 추가하거나 정렬하는 것입니다.

사용하려는 결정할 때이 수학 벡터 인 경우, 단순히 자신에게 물어. 당신은 std :: vector를 통해 스칼라 제품을 만들면서 다른 하나의 것을 잡아 둘 수 있도록 두 가지를 확장 할 수 있습니다. 그러나 왜 그렇게할까요? 아이겐은 이미 그렇게했습니다. 의도 한대로 사용하면 모든 사람에게 자신이 나타내는 것을 분명히 알 수 있으므로 가독성이 높아집니다.

+0

내가 그 전제를 따르지 않는 (libigl)를 사용하고 라이브러리. 내 생각에 더 많은 캐시 친화적이고 메모리 효율적인 것으로 생각됩니다. Eigen과 std vector 사이의 메모리 접근 속도가 근본적으로 다른가요? (나는 가독성이 큰 플러스라고 동의한다.) – Javier

+0

@Javier 두 메소드가 제공하는 메소드가 효율적으로 작성된다고 가정하면 각 메소드가 제공하는 모든 메소드에서 강점을 갖는다는 것을 의미한다. 우리가 액세스에 대해 말하면 두 경우 모두 효율적이어야합니다. 스파 스 데이터로 작업하는 경우, Eigen은 벡터 클래스가 희소하기 때문에 메모리에서 더 효율적입니다. std :: vector는 연속적인 데이터 밀도를 저장합니다. – Aziuth

+0

Eigen은 데이터 구조에 벡터화 된 연산을 구현합니다. 따라서 데이터가 수학 연산을 거치면 Eigen이 원하는 것일 수 있습니다. – daragua