Python中发生矩阵到共发生矩阵的转换
我在这里问了这个问题:Python中发生矩阵到共发生矩阵的转换,python,numpy,Python,Numpy,我在这里问了这个问题: 我意识到我的数据太大了,用R做不到这一点。我的电脑挂起了。实际数据是一个约500万行600列的文本文件。我认为Python可能是实现这一点的另一种选择 这就是将R代码转换为Python代码的方法 >>> import numpy as np >>> a=np.array([[0, 1, 0, 0, 1, 1], [0, 0, 1, 1, 0, 1], [1, 1, 1, 1, 0, 0
我意识到我的数据太大了,用R做不到这一点。我的电脑挂起了。实际数据是一个约500万行600列的文本文件。我认为Python可能是实现这一点的另一种选择 这就是将
R
代码转换为Python
代码的方法
>>> import numpy as np
>>> a=np.array([[0, 1, 0, 0, 1, 1],
[0, 0, 1, 1, 0, 1],
[1, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 1, 1]])
>>> acov=np.dot(a.T, a)
>>> acov[np.diag_indices_from(acov)]=0
>>> acov
array([[0, 2, 2, 1, 1, 1],
[2, 0, 2, 1, 2, 2],
[2, 2, 0, 2, 1, 2],
[1, 1, 2, 0, 0, 1],
[1, 2, 1, 0, 0, 2],
[1, 2, 2, 1, 2, 0]])
但是,您有一个非常大的数据集。如果您不想逐块组装共现矩阵,并将值存储在
int64
中,使用3e+9个数字,仅保存数据*+8+字节就需要24GB的RAM。因此,您可能需要仔细考虑并决定要将数据存储在哪个dtype
中:。使用int16
可能会使dot
产品操作在如今的台式PC上成为可能。你的问题是什么?如果你已经在另一个问题中问过,为什么还要再问同样的问题?@BrenBarn:另一个问题是关于在R中实现它。这个问题是关于在R中实现它Python.@Tamás:另一个问题也被标记为“Python”。假设我理解您,并且您期望的输出矩阵是600x600,那么R也可以处理这个问题。毕竟,您不需要一次将整个文件存储在内存中。您也可以在Python中轻松地完成它,但是如果您已经在R中使用了处理工具,那么它可能不值得移植。请考虑转换为稀疏矩阵()。