2014-11-06 4 views
1

참고 : 저는 이미이 질문을 던졌지 만 많은 설명없이 "너무 광범위하기 때문에 닫혔습니다. 나는이 질문이 어떻게 더 구체적 일 수 있는지를 볼 수 없다. (특정 사용법을위한 특정 라이브러리의 특정 클래스를 다룬다.) 그래서 나는 그것이 "사회자의 실수"와 같은 것으로 생각하고 다시 물어 본다. ..기존의 3 표준 압축 행/열 배열을 통해 Eigen :: SparseMatrix를 래핑하는 방법

저는 희소 행렬에 Eigen을 사용하여 희소 행렬/행렬 곱셈을 수행하고 싶습니다. 이 행렬은 표준 3 행 압축 행/열 strorage에서 작업중인 코드에 이미 정의되어 있습니다.

그런 다음 Eigen :: SparseMatrix 클래스를 이러한 배열의 래퍼로 사용하고 싶습니다. 메모리에서 행렬을 복제하지 않으려면 내부 적으로 Eigen이 이러한 3 배열 스토리지를 사용한다고 가정합니다. 다음과 같은 것을하고 싶습니다.

Eigen::SparseMatrix smin0(n,m); 
Eigen::SparseMatrix smin1(m,l); 
Eigen::SparseMatrix smout(n,l); 

smin0.set_innerPtr(myInnerPtr0); 
smin0.set_outerPtr(myOuterPtr0); 
smin0.set_valuePtr(myValuePtr0); 

smin1.set_innerPtr(myInnerPtr1); 
smin1.set_outerPtr(myOuterPtr1); 
smin1.set_valuePtr(myValuePtr1); 

smout=smin0*smin1; 

int *myOutInnerPtr=smout.innerIndexPtr(); 
int *myOutOuterPtr=smout.outerIndexPtr(); 
double *myOutValuePtr=smout.valuePtr(); 

가능하면 어떻게 할 수 있습니까?

많은 감사

+0

이미 설명서를 살펴본 결과 스파 스 매트릭스에 사용 된 형식이 3 대신 4 개의 배열을 사용하여 약간 다른 것으로 나타났습니다. 또한 작은 자습서에 3 배열을 4로 설정하는 것이 가장 간단한 방법은 스파 스 매트릭스에 값을 일괄 적으로 삽입하는 것입니다. – didierc

+0

당신은'Eigen :: MappedSparseMatrix'를 찾고 있습니다 : http://eigen.tuxfamily.org/dox/classEigen_1_1MappedSparseMatrix.html – ggael

+0

네, 내가 찾고있는 것보다 더 좋아 보인다. 해당 클래스의 보호 된 멤버를 "설정"하는 방법이 제공 되었습니까? 아니면 클래스를 파생시켜야합니까? – janou195

답변

0

ggael가 지적한 것처럼, 당신이 그것에 대해 Eigen::MappedSparseMatrix를 사용할 수 있습니다.

SparseMatrix의 내부 포인터를 덮어 쓸 수없는 이유는 SparseMatrix이 할당을 해제 할 때 문제를 일으키지 만 Eigen이 다른 방식으로 할당하면 (Eigen이 메모리를 내부적으로 할당하는 방법은 코드에서 실제로 사용하지 않아야하는 구현 세부 사항).