相关疑难解决方法(0)

如何用NumPy计算欧氏距离?

我在3D中有两点:

(xa, ya, za)
(xb, yb, zb)
Run Code Online (Sandbox Code Playgroud)

我想计算距离:

dist = sqrt((xa-xb)^2 + (ya-yb)^2 + (za-zb)^2)
Run Code Online (Sandbox Code Playgroud)

使用NumPy或Python的最佳方法是什么?我有:

a = numpy.array((xa ,ya, za))
b = numpy.array((xb, yb, zb))
Run Code Online (Sandbox Code Playgroud)

python numpy euclidean-distance

466
推荐指数
15
解决办法
65万
查看次数

Python导入X还是从X导入Y?(性能)

如果有一个库我将使用至少两种方法,那么下面的性能或内存使用是否有任何差异?

from X import method1, method2
Run Code Online (Sandbox Code Playgroud)

import X
Run Code Online (Sandbox Code Playgroud)

python performance

28
推荐指数
4
解决办法
7421
查看次数

创建距离矩阵?

我目前正在将数据读入一个看起来像这样的数据框.

City         XCord    YCord   
Boston         5        2
Phoenix        7        3
New York       8        1
.....          .        .
Run Code Online (Sandbox Code Playgroud)

我想根据这些数据创建欧几里德距离矩阵,显示所有城市对之间的距离,这样我得到一个结果矩阵,如:

             Boston    Phoenix   New York
Boston         0        2.236      3.162
Phoenix        2.236      0        2.236
New York       3.162    2.236        0
Run Code Online (Sandbox Code Playgroud)

在我的实际数据框架中有更多的城市和坐标,所以我需要能够以某种方式迭代所有城市对并创建一个像我上面所示的距离矩阵,但我不知道如何配对所有引用并引用欧几里德距离公式?任何帮助,将不胜感激.

python numpy dataframe

14
推荐指数
3
解决办法
2万
查看次数

计算python中numpy的欧几里德距离

我是Python的新手,所以这个问题可能看起来很琐碎.但是,我没有找到类似的情况.我有一个20个节点的坐标矩阵.我想计算此集合中所有节点对之间的欧氏距离,并将它们存储在成对矩阵中.例如,如果我有20个节点,我希望最终结果是(20,20)的矩阵,每个节点对之间的欧几里德距离值.我尝试使用for循环遍历坐标集的每个元素并计算欧氏距离,如下所示:

ncoord=numpy.matrix('3225   318;2387    989;1228    2335;57      1569;2288  8138;3514   2350;7936   314;9888    4683;6901   1834;7515   8231;709   3701;1321    8881;2290   2350;5687   5034;760    9868;2378   7521;9025   5385;4819   5943;2917   9418;3928   9770')
n=20 
c=numpy.zeros((n,n))
for i in range(0,n):
    for j in range(i+1,n):
        c[i][j]=math.sqrt((ncoord[i][0]-ncoord[j][0])**2+(ncoord[i][1]-ncoord[j][1])**2)
Run Code Online (Sandbox Code Playgroud)

但是,我收到的错误是"输入必须是方阵".我想知道是否有人知道这里发生了什么.谢谢

python numpy

4
推荐指数
2
解决办法
6893
查看次数

为什么对于小尺寸数据多次调用 numpy.linalg.norm 会很慢?

import numpy as np
from datetime import datetime
import math

def norm(l):
    s = 0
    for i in l:
        s += i**2
    return math.sqrt(s)

def foo(a, b, f):
    l = range(a)
    s = datetime.now()
    for i in range(b):
        f(l)
    e = datetime.now()
    return e-s

foo(10**4, 10**5, norm)
foo(10**4, 10**5, np.linalg.norm)
foo(10**2, 10**7, norm)
foo(10**2, 10**7, np.linalg.norm)
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

0:00:43.156278
0:00:23.923239
0:00:44.184835
0:01:00.343875
Run Code Online (Sandbox Code Playgroud)

似乎当np.linalg.norm多次调用小尺寸数据时,它的运行速度比我的标准函数慢。

其原因何在?

python performance numpy

4
推荐指数
1
解决办法
6605
查看次数

慢欧几里德距离

我用下面的python代码计算欧几里德距离:

def getNeighbors(trainingSet, testInstance, k, labels):
    distances = []
    for x in range(len(trainingSet)):
        dist = math.sqrt(((testInstance[0] - trainingSet[x][0]) ** 2) +    ((testInstance[1] - trainingSet[x][1]) ** 2))
        distances.append([dist, labels[x]])
    distances = np.array(distances)   
    return distances
Run Code Online (Sandbox Code Playgroud)

为了计算给定点与其他10个点的距离,这很好.但是当我用18563个其他点计算一个点的距离时,计算机会被挂起并且在3小时左右没有响应.

如何更快地计算 18563 点?

python numpy knn

1
推荐指数
1
解决办法
513
查看次数

标签 统计

python ×6

numpy ×5

performance ×2

dataframe ×1

euclidean-distance ×1

knn ×1