python - 优化邻接矩阵计算

标签 python optimization adjacency-matrix

X 是一个文本文件,其中包含 100000 相等大小(500 个元素)的位向量(即每行都是 500 个元素的向量)。我使用下面的代码生成一个邻接矩阵(100000 X 100000),但它没有优化并且非常耗时。我该如何改善这一点。

import numpy as np
import scipy.spatial.distance


 readFrom = "vector.txt"
 fout = open("adjacencymatrix.txt","a")

 X = np.genfromtxt(readFrom, dtype=None) 

 for outer in range(0,100000):
    for inner in range(0,100000):
        dis = scipy.spatial.distance.euclidean(X[outer],X[inner])
        tmp += str(dis)+" "
    tmp += "\n"        
    fout.write(tmp)
 fout.close()

谢谢。

最佳答案

对代码的一些小优化(我假设您使用的是 Python 2.x):

import numpy as np
import scipy.spatial.distance

X = np.genfromtxt("vector.txt", dtype=None) 
fout = open("adjacencymatrix.txt", "a")

for outer in xrange(0, 100000):
  fout.write(" ".join(str(scipy.spatial.distance.euclidean(X[outer], X[inner])) for inner in xrange(0, 100000)) + "\n")

fout.close()

我不建议在编写整个矩阵之前预先计算整个矩阵 - 尽管这样做可以让我们利用问题的模拟性并仅迭代一半的元素,但它会消耗很多内存。我坚持你所拥有的 - 每行都是在计算后立即写入的。

这里真正的问题是输入数据巨大,距离计算将执行 100,000 x 100,000 = 10,000'000,000 次,并且任何微优化都不会改变这一点。您确定您必须计算整个矩阵吗?

关于python - 优化邻接矩阵计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805107/

相关文章:

c# - 在 C# 2.0 中同步两个 IList 的最佳算法

python - 使用邻接矩阵进行广度优先搜索

c++ - 来自梯度图像的邻接矩阵

python - 使用生成器作为 sorted() 的输入而不是列表理解是否值得

python - 将 dict 中的列表作为值更改为 dict 中的正常值

python - 从 numpy memmap 切片创建 ndarray

python - VIM、Python : how do you use range objects generated by vim. 当前.范围

python - 具有线性约束的 Scipy.optimize.minimize SLSQP 失败

java - 在不知道邻接矩阵大小的情况下存储邻接矩阵的最有效方法是什么?

python - 二元对数损失是否排除了基于 y 的方程的一部分?