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可能在后台造成问题。