无法分配形状为 (1482535, 67826) 且数据类型为 int64 的数组

ram*_*ram 5 scipy python-3.x google-cloud-platform

我正在尝试将形状 (1482535, 67826) 的 scipy.sparse.csr.csr_matrix 存储到数据框中,但出现如下错误。我在具有 4CPU 和 208 GB 内存的 Google Cloud Platform 上运行。我不能再增加我的记忆了。我该如何解决这个问题?任何建议表示赞赏。

type(x_train_bow_name)`
scipy.sparse.csr.csr_matrix







   data1 = pd.DataFrame(x_train_bow_name.toarray())`




        ----------------------------------------------------------------- 
        ----------
        MemoryError                               Traceback (most recent 
        call 
        last)
       <ipython-input-16-283fa4dd2dd6> in <module>
         ----> 1 data1 = pd.DataFrame(x_train_bow_name.toarray())

                /usr/local/lib/python3.5/dist- 
         packages/scipy/sparse/compressed.py in toarray(self, order, out)
            1022         if out is None and order is None:
       1023             order = self._swap('cf')[0]
       -> 1024         out = self._process_toarray_args(order, out)
       1025         if not (out.flags.c_contiguous or 
      out.flags.f_contiguous):
            1026             raise ValueError('Output array must be C or 
         F contiguous')

        /usr/local/lib/python3.5/dist-packages/scipy/sparse/base.py in 
           _process_toarray_args(self, order, out)
                1184             return out
             1185         else:
            -> 1186             return np.zeros(self.shape,  
          dtype=self.dtype, order=order)
         1187 
        1188 

     MemoryError: Unable to allocate array with shape (1482535, 67826) 
      and data type int64
Run Code Online (Sandbox Code Playgroud)

Jos*_*llo 2

一切都表明这是内存过度使用问题。

\n

请查看以下链接,其中很好地解释了 Linux 中的虚拟内存设置以及过度使用的问题。

\n

修改过量使用设置的两个参数是/proc/sys/vm/overcommit_memory/proc/sys/vm/overcommit_ratio

\n

/proc/sys/vm/overcommit_memory\n这个开关知道 3 种不同的设置,但在你的情况下我认为你可以使用值 =1

\n

1:经典示例是使用稀疏数组的代码,并且仅依赖于几乎完全由零页组成的虚拟内存。

\n

超级用户可以更改该设置:

\n
echo 1 > /proc/sys/vm/overcommit_memory\n
Run Code Online (Sandbox Code Playgroud)\n

默认值为0

\n

/proc/sys/vm/overcommit_ratio\n此设置仅在 时使用overcommit_memory = 2,并定义使用物理 RAM 的百分比。最重要的是交换空间。默认值为 \xe2\x80\x9c50\xe2\x80\x9d,即 50%。

\n

超级用户可以更改该设置:

\n
echo 75 > /proc/sys/vm/overcommit_ratio\n
Run Code Online (Sandbox Code Playgroud)\n

另外请看一下下面的帖子

\n