更新的问题:
我有一个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]
所以问题是,当创建对角线中非整数的对角线矩阵时,以上内容首先因内存错误而失败。如果我设法进行处理,内核会以某种方式无法将“对象”识别为受支持的类型,这意味着我不能做稀疏矩阵?
你建议我做什么?
答案 0 :(得分:2)
尝试使用numpy的总和。以我的经验,就性能而言,它往往会将其他东西吹倒。
import numpy as np
c = np.sum(indM,axis=1)
答案 1 :(得分:1)
听起来您没有足够的RAM来处理这么大的阵列。显而易见的选择是使用scipy.sparse
中的方法,但是您说您已经尝试过了,但仍然遇到内存问题。幸运的是,还有其他一些选择:
将您的数据框更改为numpy数组(这可以减少内存开销)
您可以使用numpy.memmap
将阵列映射到磁盘上二进制中存储的位置。
以精度为代价,您可以将任何浮点数的dtype
从float64
(默认)更改为float32
。
如果您要从.csv文件加载数据,则pd.read_csv
具有选项chunksize
,该选项使您可以分块读取数据。
答案 2 :(得分:0)
尝试使用Kaggle之类的基于云的资源。那里可能有比计算机上更多的处理能力。