python中大矩阵到稀疏矩阵的转换
我需要做以下几件事python中大矩阵到稀疏矩阵的转换,python,numpy,scipy,Python,Numpy,Scipy,我需要做以下几件事 b = numpy.random.randn(50001,2) cof = numpy.corrcoef(b) c= b>=0.3 return np.dot(c, np.ones([50001,1])) 这让我犯了一个错误 如果我尝试使用稀疏矩阵,例如: asp = scipy.sparse.csc_matrix(c) 我有一个分段错误 如果矩阵大小很小,转换就可以工作 有什么建议吗?您是在计算50001维空间的两个样本还是二维空间的50001个样本之间的
b = numpy.random.randn(50001,2)
cof = numpy.corrcoef(b)
c= b>=0.3
return np.dot(c, np.ones([50001,1]))
这让我犯了一个错误
如果我尝试使用稀疏矩阵,例如:
asp = scipy.sparse.csc_matrix(c)
我有一个分段错误
如果矩阵大小很小,转换就可以工作
有什么建议吗?您是在计算50001维空间的两个样本还是二维空间的50001个样本之间的相关性 在当前情况下,您正在创建一个隐式50001 x 50001协方差矩阵(这会导致SEGFULT)。执行以下操作不会破坏内存
b = numpy.random.randn(2,50001)
cof = numpy.corrcoef(b)
希望这就是您所需要的(另一种方法会产生非常差的协方差矩阵近似值和segfault)。它在哪一行上进行segfault?(是否是带有
numpy.corrcoef
?)问题是50001x2输入的相关矩阵将是50001x50000。这是超过20Gb的内存,我想你没有。我正在拿回相关矩阵。当我尝试用1的向量做点积时,它给了我一个分割错误。这一行应该返回每个cordinate np.dot的阶数(c,np.ones([50001,1]),dtype=float),但我得到的是一个seg错误。我有一台服务器,它有48个内核和260 GB ram。但是,我只使用一个内核来运行它。我不确定一个核心要消耗多少内存。这是共享还是分布式的260 Gb?如果是分布式的,20 Gb可能无法在单个核心上使用。另外,您确定您的系统管理员允许您使用这么多内存吗?可能存在一些内存限制(这可能导致segv)。这里进行猜测,但作为一种解决方法,如果您只使用np.sum(c,1)(或np.sum(c,1)[:,None]来保持形状,它可能会起作用)?因为这个矩阵可能不是稀疏的,所以转换为稀疏就没有意义了?只是猜测np.dot可能在后台造成问题。