Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中发生矩阵到共发生矩阵的转换_Python_Numpy - Fatal编程技术网

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中使用了处理工具,那么它可能不值得移植。请考虑转换为稀疏矩阵()。