2013-03-15 6 views
5

için bir girdi olarak scipy seyrek matrisleri Scipy seyrek matrislerini verimli bir şekilde nasıl yükleyeceğinizin bir yolunu bulmak gibi görünmüyor, ör. csr_matrix, bir petsc4py matrisine, örn. PETSc.Mat().createAIJ. this thread'u buldum, ancak uygulayamıyorum.petsc4py

Ayrıca bu belgelerin belgelendiği bir işaretçiyi de takdir ediyorum. demo dizindeki örnekler yalnızca bir bölümü açıklar ve herhangi bir belge dizesi göremiyorum. PETSc-speak

PETSc.Mat().createAIJ(size=(nrows,ncols), csr=(ai,aj,aa)) 

göre this için, ai, aj ve aa vardır:

+0

Tam olarak neyi denediniz ve nasıl işe yaramadı? Sistemimde "petsc4py" yok, ancak bağlantınızdaki talimatlar bana göre oldukça basit görünüyor. – Jaime

cevap

6

Bağlantınız bir böyle komutu kullanmalısınız, PETSc bir seyrek matris oluşturmak için söylüyor

> i - row indices 
> j - column indices 
> a - matrix values 

Bunlar scypy.sparse.csr_matrix ait .indptr, .indices ve .data özelliklerine sırasıyla eşdeğerdir,bakınız Detaylar için. Bağlantı doğru ise

Yani, şu çalışmalıdır:

>>> from petsc4py import PETSc 
>>> import scipy.sparse 
>>> csr_mat = scipy.sparse.rand(1000, 1000, density=0.001, format='csr') 
>>> petsc_mat = PETSc.Mat().createAIJ(size=csr_mat.shape, 
...         csr=(csr_mat.indptr, csr_mat.indices, 
...          csr_mat.data)) 

Maalesef kendim test edemezsiniz.

+0

Bu, sorumu tamamen yanıtlıyor. Ayrıca, belgeleme hakkındaki karışıklığımı da kaldırdınız çünkü 'Mat(). CreateAIJ() işlevi açıkça belgelenen PETSc işlevini (kolayca okunabilir kod) çağırıyor. Bu işlev çağrısının PETSc işlevinin doğrudan çağrılması olduğunu fark etmemiştim. –

+0

@RafaelReiter Aslında petsc4py [burada] (https://code.google.com/p/petsc4py/source/browse/) kaynak koduna bakabilirsiniz, "createAIJ" işlevi [burada] (https://code.google.com/p/petsc4py/source/browse/src/PETSc/Mat.pyx#242). Bundan biraz daha karmaşık görünüyor, bulamadığım bir “Mat_AllocAIJ_CSR”, çağrıldı, bu yüzden kaputun altında neler olup bittiğinden emin değilim. Ama bu sizin için çalışıyorsa, o zaman sizin için çalışır ... – Jaime

+0

Haklısınız, bu kadar basit değil. Kodda birkaç saat önce MatCreateSeqAIJWithArrays'i gördüğümü düşündüm ama yapmadım. Demoların yanında tüm petsc4py işlevlerini kullanmak için doğru yolu bulmak için herhangi bir ipucu var mı? –