Python 3.x 无法分配形状为(148253567826)且数据类型为int64的数组
我试图将scipy.sparse.csr.csr_形状矩阵(148253567826)存储到一个数据帧中,但得到如下错误。我在谷歌云平台上运行,拥有4CPU和208GB内存。我不能再增加我的记忆力了。我如何解决这个问题?如有任何建议,我们将不胜感激Python 3.x 无法分配形状为(148253567826)且数据类型为int64的数组,python-3.x,google-cloud-platform,scipy,Python 3.x,Google Cloud Platform,Scipy,我试图将scipy.sparse.csr.csr_形状矩阵(148253567826)存储到一个数据帧中,但得到如下错误。我在谷歌云平台上运行,拥有4CPU和208GB内存。我不能再增加我的记忆力了。我如何解决这个问题?如有任何建议,我们将不胜感激 type(x_train_bow_name)` scipy.sparse.csr.csr_matrix data1 = pd.DataFrame(x_train_bow_name.toarray())` -
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
类型(x\u列车\u船首\u名称)`
scipy.sparse.csr.csr_矩阵
data1=pd.DataFrame(x_train_bow_name.toarray())`
-----------------------------------------------------------------
----------
MemoryError回溯(最近的
呼叫
最后)
在里面
---->1 data1=pd.DataFrame(x_train_bow_name.toarray())
/usr/local/lib/python3.5/dist-
包/scipy/sparse/compressed.py in-toarray(self、order、out)
1022如果out为None且order为None:
1023订单=自交换('cf')[0]
->1024 out=self.\u进程\u到阵列\u参数(订单,输出)
1025如果不是(out.flags.c_或
out.flags.f_连续):
1026 raise VALUERROR('输出数组必须是C或
F连续')
/中的usr/local/lib/python3.5/dist-packages/scipy/sparse/base.py
_处理到阵列参数(自身、订单、输出)
1184返回
1185其他:
->1186返回np.零(自形,
dtype=self.dtype,order=order)
1187
1188
MemoryError:无法分配具有形状的数组(148253567826)
和数据类型int64
一切都表明这是一个问题
请看下面的内容,其中很好地解释了Linux中的虚拟内存设置以及Overmit的问题
修改过限设置的两个参数是/proc/sys/vm/overmit_memory
和/proc/sys/vm/overmit_ratio
/proc/sys/vm/overmit\u内存
此开关知道3种不同的设置,但在您的情况下,我认为您可以使用值=1
1:典型的例子是使用稀疏数组的代码,它仅仅依赖于几乎完全由零页组成的虚拟内存
超级用户可以更改该设置:
echo 1 > /proc/sys/vm/overcommit_memory
echo 75 > /proc/sys/vm/overcommit_ratio
默认值为0
/proc/sys/vm/overmit\u比率
此设置仅在overmit_memory=2
时使用,并定义使用的物理RAM的百分比。交换空间在上面。默认值为“50”,即50%
超级用户可以更改该设置:
echo 1 > /proc/sys/vm/overcommit_memory
echo 75 > /proc/sys/vm/overcommit_ratio
另外,请查看以下内容在pandas中读取稀疏scipy矩阵的方法是:
pd.DataFrame.sparse.from_spmatrix(my_sparse_matrix)
这将创建具有稀疏数据类型的数据帧。稀疏数据类型的形式为pd.SparseDtype(“float”,np.nan)
通过执行my_sparse_matrix.toarray()操作,您正在撤消它的“稀疏性”。您正在运行64位python吗?嘿!这似乎是内存过度使用的问题。检查numpy在哪里解决了相同的问题。如果这对你有帮助,请告诉我。