我现在正在学习python并且有一个关于numpy.linalg.lstsq()的问题 如果存在稀疏矩阵,它总是会给我一些错误: 这是我做过的测试
I = np.array([0,3,1,0])
J = np.array([0,3,1,2])
V = np.array([4,5,7,9])
A = sp.sparse.coo_matrix((V,(I,J)),shape=(4,4))
w=np.linalg.lstsq(A,B)[0]
在这种情况下,我得到了:
"Traceback (most recent call last):
File "<ipython-input-312-d63f88f92c68>", line 1, in <module>
w=np.linalg.lstsq(Atest,B)[0]
File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 1822, in lstsq
_assertRank2(a, b)
File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 196, in _assertRank2
'two-dimensional' % len(a.shape))
LinAlgError: 0-dimensional array given. Array must be two-dimensional
"
但是,如果我将A定义为普通数组,它可以很好地工作:
Atest=np.array([[4,0,9,0],[0,7,0,0],[0,0,5,0],[0,0,0,0]])
w=np.linalg.lstsq(Atest,B)[0]
任何人都可以提供一些建议,将稀疏矩阵保存为“普通数组”。我试着用.todense()。如果稀疏矩阵不那么大,它可以很好地工作。但是,如果稀疏矩阵非常大,它会给我一个错误。
File "<ipython-input-313-f232260bfc9f>", line 1, in <module>
tosave=bigsparsematrix[:,1:-1].toarray()
File "C:\Python27\lib\site-packages\scipy\sparse\compressed.py", line 901, in toarray
return self.tocoo(copy=False).toarray(order=order, out=out)
File "C:\Python27\lib\site-packages\scipy\sparse\coo.py", line 269, in toarray
B = self._process_toarray_args(order, out)
File "C:\Python27\lib\site-packages\scipy\sparse\base.py", line 789, in _process_toarray_args
return np.zeros(self.shape, dtype=self.dtype, order=order)
ValueError: array is too big