2011-04-30 7 views
0

저는 C에서 프로그램을 개발하여 스파 스 매트릭스 파일을 고밀도 매트릭스로 변환하려고합니다. 필자가 읽은 바에 따르면 가장 좋은 방법은 연결된 목록을 사용하는 것이지만 필자는 이들에 대한 경험이 없으며 주제를 설명하는 좋은 온라인 리소스를 찾지 못했습니다. 나는 빠른 해결책을 찾고있는 것이 아니라 프로세스가 어떻게 작동하는지 설명 할 수있는 웹 사이트 또는 텍스트 소스를 찾고있어이 프로젝트에 적용 할 수 있습니다. 필자가 보았던 자원 중에는 매트릭스의 값 (행, 열 및 개별 값)과 벡터에 대한 두 개의 배열 (행에 대해 하나, 다른 열에 대해)을 처리하기 위해 세 개의 배열을 사용하는 것이 좋습니다. 감사!C에서 스파 스 매트릭스 변환

+1

원본 파일의 데이터 형식은 무엇입니까? –

+0

입력 파일에는 불필요한 형식이 포함되지 않으며 일련의 필수 값으로 엄격하게 채워집니다. 행렬 파일의 처음 두 값은 행과 열의 차원으로 차원을 표시하며 나머지 값은 필요한 데이터입니다. 예를 들어, 10x10 행렬이있는 경우 처음 두 값은 10과 10이고 그 다음에 100 개의 요소가 데이터로 사용됩니다. 나는 행렬 - 벡터 곱셈을 수행 할 수 있도록 스파 스 행렬을 조밀하게 채워진 행렬로 변환해야하므로 행렬과 벡터가 모두 변환을 거쳐야합니다. – Strata

+0

그러나, 이미 aspect가 완성되도록 곱셈 알고리즘을 설계했습니다. 처음 두 값 다음에 파일의 나머지 부분은 순서대로 값을 나열하지만 변환 후 1 차원 배열에 저장됩니다. 이 개념이 아직 나에게 매우 추상적이기 때문에 이것이 명확하지 않다면 미안합니다. – Strata

답변

0

지정한 파일 형식은 밀집한 매트릭스 용입니다. 100 개 요소가있는 10x10 행렬은 밀도가 높습니다. 희소 행렬은 n * m보다 적은 요소를 가지고 있고 "누락"요소는 모두 0으로 가정합니다.이 방법을 사용하는 지점은 거의 모든 0 인 행렬 (많은 응용 프로그램에서 발생) 공간. 그러나 조밀 한 행렬 형식을 사용하여 조밀 한 행렬을 저장하면 일반 배열보다 훨씬 더 많은 공간이 사용됩니다.

하나의 일반적인 스파 스 매트릭스 파일 형식을 MatrixMarket이라고하며, 설명 된 것과 매우 유사합니다. 첫 번째 줄에는 #, 행 수, 열 수, 0이 아닌 요소 수 (nnz)가 있습니다. 그런 다음 세 줄 안에 실제 원소의 nnz 줄이 있습니다. (row #) (column #) (value) 스파 스 매트릭스가 비슷한 형식이면 메모리에 스파 스 매트릭스가 필요하지 않습니다. 그냥 값을 스캔하고 밀도가 높은 배열을 직접 채우십시오.

스파 스 매트릭스를 메모리에 저장하려면 저장 방법에 대한 몇 가지 옵션이 있습니다. 삼중 항이 가장 쉽고, MatrixMarket 파일의 메모리 내 버전 일뿐입니다. 3 개의 배열 또는 1 개의 구조체 배열. 선형 대수 연산의 가장 일반적인 구조는 CSC (Compressed Sparse Columns) 또는 CSR (Compressed Sparse Rows)입니다. 나는 당신이 그것을 보도록 하겠지만, C 구현물을 가지고 놀고 싶다면 Tim Davis의 CSparse을 봐야한다. 이것은 MatLAB이 희소 행렬을 저장하는 방법이기도합니다. Tim은 MatLAB의 일부분을 작성한 사람들 중 한 사람이었습니다.

0

연결된 목록처럼 들리지만 찾고자하는 내용이 아닐 수도 있지만 this site은 주제에 대한 포괄적 인 자습서를 제공합니다. 그것은 당신의 문제에 적합할지 여부를 밝혀주는 데 도움이 될 것입니다 ... 행운을 빌어 요!

관련 문제