如何使用稀疏矩阵的linalg.lstsq()?如何将BIG稀疏矩阵保存为便携式数据格式

时间:2014-12-21 16:27:46

标签: python numpy matrix

我现在正在学习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

0 个答案:

没有答案