更新的问题:
我有一个稀疏的120000x14000矩阵。然后我想做一些矩阵代数:
c = np.sum(indM, axis=1).T
w = np.diag(1 / np.array(c)[0]) # Fails with memory error
w = sparse.eye(len(indM), dtype=np.float)/np.array(c)[0] # Fails with memory error
w = np.nan_to_num(w)
u = w @ indM # Fails with 'Object types not supported'
u_avg = np.array(np.sum(u, axis=0) / np.sum(indM, axis=0))[0]
所以问题在于,当在对角线中创建具有非整数的对角矩阵时,上述首先失败并且存在记忆错误。如果我设法继续进行,内核以某种方式不会将“对象”识别为支持的类型,这意味着我不能做稀疏矩阵,我想?
你推荐我做什么?
尝试使用numpy的总和。根据我的经验,在性能方面,它往往会将其他东西从水中吹走。
import numpy as np
c = np.sum(indM,axis=1)
听起来你没有足够的RAM来处理这么大的数组。这里显而易见的选择是使用来自scipy.sparse
的方法,但是你说你已经尝试过但仍然遇到内存问题。幸运的是,还有一些其他选择:
numpy.memmap
将数组映射到磁盘上以二进制形式存储的位置。dtype
从float64
(默认值)更改为float32
。pd.read_csv
有一个选项chunksize
,它允许您以块的形式读取数据。尝试使用像Kaggle这样的基于云的资源。可用的处理能力可能高于您的机器。