标签: euclidean-distance

使用 numpy 或 scipy 计算两组向量之间的欧几里得距离的最快方法

好的,我最近发现该scipy.spatial.distance.cdist命令可以非常快速地解决源和目标的两个向量数组之间的完整距离矩阵。请参阅:如何使用 numpy 计算欧氏距离? 我想在解决两个相同大小的数组之间的距离时尝试复制这些性能提升。两个 SINGLE 向量之间的距离计算起来相当直接,如上一个链接所示。我们可以采用向量:

    import numpy as np
    A=np.random.normal(size=(3))
    B=np.random.normal(size=(3))
Run Code Online (Sandbox Code Playgroud)

然后使用“numpy.linalg.norm”,其中

    np.linalg.norm(A-B)
Run Code Online (Sandbox Code Playgroud)

相当于

    temp = A-B
    np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
Run Code Online (Sandbox Code Playgroud)

但是,当我想知道my_distance = distance_between( A[i], B[i] ) for all i第二个解决方案完美运行的两组向量之间的距离时,这很好用。正如预期的那样:

    A=np.random.normal(size=(3,42))
    B=np.random.normal(size=(3,42))     
    temp = A-B
    np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
Run Code Online (Sandbox Code Playgroud)

给了我一组 42 个距离的ith 元素Aith 元素之间的距离B。而该norm函数正确计算整个矩阵的范数,给我一个不是我正在寻找的值。具有 42 个距离的行为是我想要保持的,希望以几乎与我cdist解决完整矩阵所获得的速度一样快。所以问题是使用 python 和 numpy/scipy 计算i具有 shape 的数据之间的距离的最有效方法是什么(n,i)

谢谢,斯隆

numpy python-2.x scipy euclidean-distance

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

计算3D中两点之间的距离

我的任务是创建主类,在其中我将任何点的值初始化为(0,0,0)并且能够分别访问和改变所有三个值(x,y,z).为此,我使用了getter和setter.我的下一个任务是在我的主类(我称之为"distanceTo")中创建一个计算两点之间距离的方法.

如何创建方法" distanceTo",通过获取x,y,z坐标来计算两点之间的距离?我假设我的答案将与某些事情有关,sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)但我不知道如果我的点在我的第二个测试点类之前没有定义,我怎么能在我的主类中的方法中编写它

到目前为止我只有两点,但我正在寻找一个更一般的答案(所以如果我创建三个点,p1 p2和p3,我可以计算p1和p2之间的距离或p2和p3之间的距离或距离在p1和p3之间.

我的主要课程:

package divingrightin;

public class Point3d {

    private double xCoord;
    private double yCoord;
    private double zCoord;


    public Point3d(double x, double y, double z){
        xCoord = x;
        yCoord = y;
        zCoord = z;
    }

    public Point3d(){
        this (0,0,0);
    }

    public double getxCoord() {
        return xCoord;
    }
    public void setxCoord(double xCoord) {
        this.xCoord = xCoord;
    }
    public double getyCoord() {
        return yCoord;
    }
    public void setyCoord(double yCoord) {
        this.yCoord = yCoord;
    }
    public double …
Run Code Online (Sandbox Code Playgroud)

java distance euclidean-distance coordinate getter-setter

5
推荐指数
2
解决办法
5925
查看次数

在Python中向量化平方欧几里德距离的掩码

我正在运行代码以生成B中位置的掩码,该掩码比D中的位置更接近A中的位置。

N = [[0 for j in range(length_B)] for i in range(length_A)]    
dSquared = D*D

for i in range(length_A):
    for j in range(length_B):
        if ((A[j][0]-B[i][0])**2 + (A[j][1]-B[i][1])**2) <= dSquared:
            N[i][j] = 1
Run Code Online (Sandbox Code Playgroud)

对于长度为数万个位置的A和B的列表,此代码需要一些时间。我很确定有办法矢量化它,但是可以使其运行得更快。谢谢。

python numpy vectorization scipy euclidean-distance

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

条目与列之间的Pyspark欧式距离

我正在与pyspark合作,想知道在数组的一行条目和整个列之间是否有任何聪明的方法来获取欧氏距离。例如,有一个像这样的数据集。

+--------------------+---+
|            features| id|
+--------------------+---+
|[0,1,2,3,4,5     ...|  0|
|[0,1,2,3,4,5     ...|  1|
|[1,2,3,6,7,8     ...|  2|
Run Code Online (Sandbox Code Playgroud)

选择一列,即id == 1,然后计算欧几里德距离。在这种情况下,结果应为[0,0,sqrt(1 + 1 + 1 + 9 + 9 + 9)]。有人能找出如何有效地做到这一点吗?谢谢!

euclidean-distance pyspark

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

在Pytorch中计算欧几里得范数。.难以理解实现

我看过另一个StackOverflow线程,它在讨论用于计算欧几里得范数的各种实现,而我很难理解为什么/如何实现特定的实现。

可在MMD度量的实现中找到代码:https : //github.com/josipd/torch-two-sample/blob/master/torch_two_sample/statistics_diff.py

这是一些开始的样板:

import torch
sample_1, sample_2 = torch.ones((10,2)), torch.zeros((10,2))
Run Code Online (Sandbox Code Playgroud)

接下来的部分是我们从上面的代码中提取的内容。我不确定为什么将这些样本连接在一起。

sample_12 = torch.cat((sample_1, sample_2), 0)
distances = pdist(sample_12, sample_12, norm=2)
Run Code Online (Sandbox Code Playgroud)

然后传递给pdist函数:

def pdist(sample_1, sample_2, norm=2, eps=1e-5):
    r"""Compute the matrix of all squared pairwise distances.
    Arguments
    ---------
    sample_1 : torch.Tensor or Variable
        The first sample, should be of shape ``(n_1, d)``.
    sample_2 : torch.Tensor or Variable
        The second sample, should be of shape ``(n_2, d)``.
    norm : float
        The l_p norm to be used.
    Returns
    -------
    torch.Tensor …
Run Code Online (Sandbox Code Playgroud)

python euclidean-distance pytorch

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

如何在给定m个点的四维空间中有效地找到两个最远点(欧几里德距离)?

给定m个4维点,找出具有最大欧几里德距离的两个点的有效方法是什么?

目前,我只是使用蛮力方法并使用2个嵌套for循环(O(m ^ 2))检查每对距离,但这是非常糟糕的,因为它不能缩放.

algorithm euclidean-distance

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

绘制一个图,其中顶点之间的距离对应于边权重

当我给他一个加权图并且顶点之间的边权重指向顶点之间的距离时,是否有一种算法可以给我图中顶点的坐标

就像是:

public _ArrayOfCoordinatesForVertices_ **super_hyper_algorithm**(weighted_graph){  
     return _foo_;  
}
Run Code Online (Sandbox Code Playgroud)

algorithm drawing graph euclidean-distance

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

Python:减少元组的元组

我试图在Python中计算从A点到B点通过中间点列表的路径长度.我知道怎么做,但我确实想使用reduce Built-in功能.

为什么我到目前为止尝试过,请注意这是完全错误的,是这样的:

reduce(lambda x,y: math.sqrt((y[1]-y[0])**2+(x[1]-x[0])**2) , ((1,2),(3,4),(1,8)))
Run Code Online (Sandbox Code Playgroud)

任何的想法?

谢谢.

python reduce lambda euclidean-distance

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

如何找到两个坐标矩阵之间最接近的对应向量?

我在Python中有以下问题需要解决:

给定两个坐标矩阵 (NumPy ndarrays) AB,查找中相应坐标向量a中的所有坐标向量,使得欧几里得距离最小。坐标矩阵和可以具有不同数量的坐标向量(即不同的行数)。AbB||a-b||AB

此方法应返回一个坐标向量矩阵,其中中的C第 i 个向量是与中的第 i 个坐标向量的欧几里德距离最小化的向量。cCBaA

例如,假设

A = np.array([[1,1], [3,4]])B = np.array([[1,2], [3,6], [8,1]])

向量[1,1]inA和向量 in之间的欧几里德距离B为:

1, 5.385165, 7
Run Code Online (Sandbox Code Playgroud)

所以第一个向量C[1,2]

[3,4]类似地,向量inA和向量 in的距离B为:

2.828427, 2, 5.830952  
Run Code Online (Sandbox Code Playgroud)

所以第二个也是最后一个向量C将是[3,6]

所以C = [[1,2], [3,6]]

如何在 Python 中高效地编写此代码?

python numpy vector euclidean-distance

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

欧几里得距离的矢量化实现

我正在尝试计算欧几里得距离的矢量化实现(使用内积在 X 和 Y 中的每个元素之间)。数据如下:

X = np.random.uniform(low=0, high=1, size=(10000, 5))
Y = np.random.uniform(low=0, high=1, size=(10000, 5))
Run Code Online (Sandbox Code Playgroud)

我所做的是:

euclidean_distances_vectorized = np.array(np.sqrt(np.sum(X**2, axis=1) - 2 * np.dot(X, Y.T) + np.sum(Y**2, axis=1)))
Run Code Online (Sandbox Code Playgroud)

尽管这给出了“一些输出”,但答案是错误的,因为每行仍然包含 5 个元素。

有谁知道我做错了什么?

python numpy vectorization euclidean-distance

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