Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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 如何避免由double';对于循环';当计算向量之间的距离时_Python_Numpy_Complexity Theory_Distance_Quadratic - Fatal编程技术网

Python 如何避免由double';对于循环';当计算向量之间的距离时

Python 如何避免由double';对于循环';当计算向量之间的距离时,python,numpy,complexity-theory,distance,quadratic,Python,Numpy,Complexity Theory,Distance,Quadratic,给定以下代码,该代码计算列表“vect”中向量之间的距离: import numpy as np vect=([0.123, 0.345, 0.789], [0.234, 0.456, 0.567],[0.134, 0.246, 0.831]) def kn(): for j in vect: c=np.array(j) for z in vect: p=np.array(z) space = np.lina

给定以下代码,该代码计算列表“vect”中向量之间的距离:

import numpy as np
vect=([0.123, 0.345, 0.789], [0.234, 0.456, 0.567],[0.134, 0.246, 0.831])
def kn():
    for j in vect:
        c=np.array(j)
        for z in vect:
            p=np.array(z)
            space = np.linalg.norm(c-p)
            print space
kn()
有没有办法避免双重“for循环”导致的二次复杂性

双for循环(二次型)==3X3=9的计算结果


提前感谢您的建议。

为避免重复对,嵌套循环应从外部循环的索引向上,即:

for i, v1 in enumerate(vect):
    for j in xrange(i + 1, len(vect)):
        a = np.array(v1)
        b = np.array(vect[j])
        space = np.linalg.norm(b - a)
        print space
或者使用标准库提供的解决方案:

import itertools

for v1, v2 in itertools.combinations(vect, 2):
    a = np.array(v1)
    b = np.array(v2)
    space = np.linalg.norm(b - a)
    print space

为避免重复对,嵌套循环应从外部循环的索引向上移动,即:

for i, v1 in enumerate(vect):
    for j in xrange(i + 1, len(vect)):
        a = np.array(v1)
        b = np.array(vect[j])
        space = np.linalg.norm(b - a)
        print space
或者使用标准库提供的解决方案:

import itertools

for v1, v2 in itertools.combinations(vect, 2):
    a = np.array(v1)
    b = np.array(v2)
    space = np.linalg.norm(b - a)
    print space

其他人注意到,您无法避免二次复杂性。但是如果您关心的是性能,那么可以通过使用大大加快速度,这将使所有循环和函数调用都在C语言中进行,而不是在Python中进行。下面的代码返回一个正方形对称数组,但它只进行
n*(n-1)/2
计算:

from scipy.spatial.distance import pdist

pairwise_distances = pdist(vect, metric='euclidean', p=2)
如果需要仅具有唯一非对角值的展平阵列,可以使用:


在您的情况下,
成对距离将是一个3元素长的数组。

其他人注意到,您无法避免二次复杂度。但是如果您关心的是性能,那么可以通过使用大大加快速度,这将使所有循环和函数调用都在C语言中进行,而不是在Python中进行。下面的代码返回一个正方形对称数组,但它只进行
n*(n-1)/2
计算:

from scipy.spatial.distance import pdist

pairwise_distances = pdist(vect, metric='euclidean', p=2)
如果需要仅具有唯一非对角值的展平阵列,可以使用:


在你的例子中,
成对距离
将是一个3元素长的数组。

。你的解决方案发挥了神奇的作用。多谢了,大哥。你的解决方案发挥了神奇的作用。非常感谢。感谢您提供的解决方案和信息,它们都很有效。我更喜欢只导入pdist的那个。谢谢。谢谢你提供的解决方案和信息,它们都很有效。我更喜欢只导入pdist的那个。谢谢