2012-07-29 206 views
2

我喜欢这个转身稀疏矩阵

>>>import numpy as np 
>>>from scipy.sparse import * 
>>>A = csr_matrix((np.identity(3))) 

>>>print A 
    (0, 0) 1.0 
    (1, 1) 1.0 
    (2, 2) 1.0 

为了更好地理解A一些稀疏矩阵是这样的:

>>>print A.todense() 
[[ 1. 0. 0.] 
[ 0. 1. 0.] 
[ 0. 0. 1.]] 

,我想有一个运营商(我们称之为op1(n))这样做:

>>>A.op1(1) 
[[ 0. 1. 0.] 
[ 0. 0. 1.] 
[ 1. 0. 0.]] 

=>使最后n列第一n的, 所以

>>>A == A.op1(3) 
true 

。是否有一些内置解决方案,(EDIT :),它又返回一个稀疏矩阵? 与roll解决办法:

X = np.roll(X.todense(),-tau, axis = 0) 
print X.__class__ 

回报

<class 'numpy.matrixlib.defmatrix.matrix'> 

回答

3

scipy.sparse没有roll,但你可以hstack模拟它:

from scipy.sparse import * 
A = eye(3, 3, format='csr') 
hstack((A[:, 1:], A[:, :1]), format='csr') # roll left 
hstack((A[:, -1:], A[:, :-1]), format='csr') # roll right 
2
>>> a = np.identity(3) 
>>> a 
array([[ 1., 0., 0.], 
     [ 0., 1., 0.], 
     [ 0., 0., 1.]]) 
>>> np.roll(a, -1, axis=0) 
array([[ 0., 1., 0.], 
     [ 0., 0., 1.], 
     [ 1., 0., 0.]]) 
>>> a == np.roll(a, 3, axis=0) 
array([[ True, True, True], 
     [ True, True, True], 
     [ True, True, True]], dtype=bool) 
+0

作品完美!返回一个ndarray并且没有矩阵?有不同的吗? – 2012-07-29 19:38:03