我在这里问了这个问题:如何将出现矩阵转换为共现矩阵
我意识到我的数据是如此之大,以至于无法使用 R 来执行此操作。我的计算机挂起。实际数据是一个包含约 500 万行和 600 列的文本文件。我认为 Python 可能是执行此操作的替代选择。
我在这里问了这个问题:如何将出现矩阵转换为共现矩阵
我意识到我的数据是如此之大,以至于无法使用 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 数字中,那么仅保存数据就需要 24GB 的 RAM http://www.wolframalpha.com/输入/?i=3e9+ *+8+字节。因此,您可能需要考虑并决定dtype
要将数据存储在哪个位置:http: //docs.scipy.org/doc/numpy/user/basics.types.html。使用现在int16
可能会使dot
产品在一台像样的台式电脑上运行成为可能。