2011-06-21 23 views
14

scipy.sparse matrisini bir güçle nasıl eşleştirebilirim? numpy.power, its manual göre bu yapmalıyım, ama seyrek matrisler üzerinde başarısız:Scipy.sparse matrisinin eleman gücü Gücü

>>> X 
<1353x32100 sparse matrix of type '<type 'numpy.float64'>' 
     with 144875 stored elements in Compressed Sparse Row format> 

>>> np.power(X, 2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File ".../scipy/sparse/base.py", line 347, in __pow__ 
    raise TypeError('matrix is not square') 
TypeError: matrix is not square 

aynı sorunu X**2 ile. Yoğun bir diziye dönüştürme çalışır, ancak değerli saniye israf eder.

np.multiply ile aynı sorunu yaşadım; bu, sparse matrix'in multiply yöntemini kullanarak çözdüm ama pow yöntemi yok gibi görünüyor.

+0

Size cevabı vermek için numpy ile yeterince tanıdık değilim, ancak kodunuz belgelere aykırı değil. Numpy.power öğesine yapılan ikinci argüman bir sayı değil, başka bir matris olmalıdır. – RoundTower

+0

Nesnenin, element matrisi yapmak yerine tüm matrisi kare haline getirmeye çalışan '__pow__' yöntemini çağırıyor gibi görünüyor. Bu başarısız çünkü matrisin kare olmadığı anlamına gelir. –

+0

@RoundTower: aslında, ikinci öğe, Numpy'deki bir matrisle aynı olmayan bir dizi olmalıdır, ancak bir skaler, bir '(1,) 'veya' (1,1) 'dizisi ile aynıdır. yoğun bir dizide "numpy.power" amaçları. –

cevap

9

Bu biraz düşük seviyeli, ancak öğeye göre operasyonlar için doğrudan temel veri dizisi ile çalışabilirsiniz: o seyrek matris artık elemanı destekler

>>> import scipy.sparse 
>>> X = scipy.sparse.rand(1000,1000, density=0.003) 
>>> X = scipy.sparse.csr_matrix(X) 
>>> Y = X.copy() 
>>> Y.data **= 3 
>>> 
>>> abs((X.toarray()**3-Y.toarray())).max() 
0.0 
4

ben sadece aynı soru ile karşılaştım ve bulmak -doğru güç. Yukarıdaki durum için:

X.power(2) 
+0

Bu python 2.7 için mi? –

İlgili konular