2011-04-29 7 views
3

가능한 모든 값을 배치하는 대신 함수에서 scipy에 희소 행렬을 정의 할 수 있습니까? 다큐 멘 테이션의에서 나는 메모리를 많이 사용하는 사전에 행렬을 지정하는 희소 행렬이함수로 정의 된 SciPy의 희소 행렬

There are seven available sparse matrix types: 
csc_matrix: Compressed Sparse Column format 
csr_matrix: Compressed Sparse Row format 
bsr_matrix: Block Sparse Row format 
lil_matrix: List of Lists format 
dok_matrix: Dictionary of Keys format 
coo_matrix: COOrdinate format (aka IJV, triplet format) 
dia_matrix: DIAgonal format 

이러한 힘의 모두에 의해 생성 될 수 있음을 참조하십시오. 필요한 경우 (i, j)를 계산하는 함수를 제공 할 수있는 방법이 있습니까? 최종 목표는 Lanczos 방법과 같은 것을 통해 행렬의 가장 큰 고유 벡터를 계산하는 것입니다.

+0

파이썬 루프를 피하려고합니까? (분명히 분명히) 빈 희소 행렬이 생성 된 후에 값을 설정할 수 있기 때문에 : m [i, j] = fn (i, j)' – Paul

+0

@Paul 나는 메모리에 값을 설정하지 않는 것이 이상적이다. (매우 큰) 희소 행렬이 있는데, 0이 아닌 원소의 수가 메모리의 크기보다 크지 만 계산이 빠릅니다. – Hooked

답변

2

짧은 대답은 "아니오"이지만, 여러분 자신의 매트릭스와 같은 객체를 굴리는 것이 꽤 쉽습니다. 답을 얻기 위해 eigsh을 사용하는 경우 (Lanczos 알고리즘의 구현처럼 보입니다.) 행렬과 유사하면 matvec(x) 방법이 필요합니다. 이는 쉽게 또는 쉽지 않을 수 있습니다.

저는 이것이 완전한 대답은 아니지만 이것이 당신을 당신의 길로 인도하기를 바랍니다.

+0

대답이 괜찮다면, 다른 라이브러리에서 내가 필요한 것을 둘러 봐야 할 것입니다. 감사! – Hooked

관련 문제