如何解决ValueError:数组太大错误?

时间:2014-01-17 14:23:09

标签: python arrays numpy scipy orange

我有一个scipy稀疏矩阵(csr:Compressed Sparse Row matrix)。我想使用Orange的功能选择方法(Orange.feature.scoring.score_all(InfoGain / MDL))。但是,根据我的理解,我将不得不创建一个只接受numpy数组作为参数的表。因此,每当我尝试将csr矩阵转换为数组时,使用(.toarray()),我得到以下错误(因为矩阵的大小):

Traceback (most recent call last):
  File "C:\Users\NMS\Desktop\PyExp\experiments_acl2013.py", line 249, in <module>
    print(X_train.toarray())
  File "C:\Python27\lib\site-packages\scipy\sparse\compressed.py", line 561, in toarray
    return self.tocoo(copy=False).toarray(order=order, out=out)
  File "C:\Python27\lib\site-packages\scipy\sparse\coo.py", line 238, in toarray
    B = self._process_toarray_args(order, out)
  File "C:\Python27\lib\site-packages\scipy\sparse\base.py", line 635, in _process_toarray_args
    return np.zeros(self.shape, dtype=self.dtype, order=order)
ValueError: array is too big.

是否有另一种方法可以让我传递稀疏矩阵来创建表格? 要么 有没有办法在Orange中应用InfoGain或MDL,而无需直接使用我的稀疏矩阵创建表格?

将memmap传递给表时,我收到以下错误:

>>> t2 = Table(d2, mm)

Traceback (most recent call last):
   File "<pyshell#125>", line 1, in <module>
    t2 = Table(d2, mm)
   TypeError: invalid arguments

在没有域名的情况下传递memmap时,我得到以下内容:

>>> mm
memmap([[0, 1, 2, 4],
       [9, 8, 6, 3]])
>>> t2 = Table(mm)

Traceback (most recent call last):
  File "<pyshell#128>", line 1, in <module>
    t2 = Table(mm)
TypeError: invalid arguments for constructor (domain or examples or both expected)

1 个答案:

答案 0 :(得分:0)

这是一个解决方法。对于名为coo_matrix的{​​{1}}(使用m获得):

1)创建一个m.tocoo()数组进行写作:

numpy.memmap

2)将数据复制到memmap数组,该数组应该可以工作:

mm = np.memmap('test.memmap', mode='w+', dtype=m.dtype, shape=m.shape)

3)您可以按照the documentation...

中的详细说明访问memmap