O özellik yerleşik değildir, ancak, sen olmalı Kendi dok_matrix
sınıfınızı veya Scipy'nin alt sınıfını yazabilir. Scipy uygulaması burada: https://github.com/scipy/scipy/blob/master/scipy/sparse/dok.py En azından dict.*
çağrılarının yapıldığı yerlerde, varsayılan değerin değiştirilmesi gerekiyor --- ve belki de yapılması gereken başka değişiklikler var. Ancak, bu gerekli olmayan şekilde yeniden formüle etmeye çalışırdım. Örneğin sen lineer cebir yaparsanız, sabit terim yalıtmak ve en lineer cebir rutinleri (örneğin yinelemeli çözücüler) için yerine
from scipy.sparse.linalg import LinearOperator
A = whatever_dok_matrix_minus_constant_term
def my_matvec(x):
return A*x + constant_term * x.sum()
op = LinearOperator(A.shape, matvec=my_matvec)
yapabilirsin op
yerine A
geçirebilirsiniz.
Matris logaritmasıyla ilgili olarak: bir seyrek matrisin logaritması (scipy.linalg.logm
'daki gibi) genellikle yoğundur, bu nedenle matrisi önce yoğun olanı dönüştürmeniz ve daha sonra her zamanki gibi logaritmayı hesaplamanız gerekir. Gördüğüm kadarıyla, seyrek bir matris kullanmak performans artışı sağlamazdı. Bir vektörün sadece logaritması ve log(A) * v
vektörünü hesaplamak için ihtiyacınız varsa, bazı Krylov metodu yardımcı olabilir. Eğer otoh logaritma elementwise hesaplamak istiyorsanız
, siz yukarıdaki Bu yalnız sıfır elemanları bırakır
x = A.tocoo()
x.data = np.log(x.data)
A = x.todok()
(en azından COO, CSR ve CSC mevcut) doğrudan .data
niteliğini değiştirmek, ancak Bu, sabit parçayı ayrı ayrı işlemeye izin verir.
Teşekkürler! Bu basit fonksiyonların henüz doğrudan uygulanmadığı bir talihsizliktir :( – ElKamina
Bunun, seyrek matrisler için basit bir işlevsellikten ziyade oldukça özel olacağını söyleyebilirim :) Bu tür şeylerin diğer seyreklerde uygulanıp uygulanmadığını bilmiyorum Matrix paketleri, ama AFAIK Matlab'ın böyle şeyleri yok gibi görünüyor. Sorun, "eksik" değerinin sıfır olmaması durumunda, seyrek matrislerle yapabileceğiniz birçok işlemin (örneğin, faktörizasyon vb.) Iyi çalışmadığıdır. –
@pv Evet. Varsayılan değer konusunda size katılıyorum. Ancak matrisin logunu hesaplamak gibi başka şeyler de uygulanmalıydı. Bir trivia biraz. X + 1 çalışmalarının belirli türdeki seyrek matrisleri için, ancak 1 + X, fark edilmeyen istisnayı artırır: D – ElKamina