我有一些像这样的稀疏矩阵
>>>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'>
答案 0 :(得分: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
答案 1 :(得分: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)