首先,这不是计算两个矩阵之间的欧几里德距离的问题。
假设我有两个矩阵x和y,例如
set.seed(1)
x <- matrix(rnorm(15), ncol=5)
y <- matrix(rnorm(20), ncol=5)
Run Code Online (Sandbox Code Playgroud)
在哪里
> x
[,1] [,2] [,3] [,4] [,5]
[1,] -0.6264538 1.5952808 0.4874291 -0.3053884 -0.6212406
[2,] 0.1836433 0.3295078 0.7383247 1.5117812 -2.2146999
[3,] -0.8356286 -0.8204684 0.5757814 0.3898432 1.1249309
> y
[,1] [,2] [,3] [,4] [,5]
[1,] -0.04493361 0.59390132 -1.98935170 -1.4707524 -0.10278773
[2,] -0.01619026 0.91897737 0.61982575 -0.4781501 0.38767161
[3,] 0.94383621 0.78213630 -0.05612874 0.4179416 -0.05380504
[4,] 0.82122120 0.07456498 -0.15579551 1.3586796 -1.37705956
Run Code Online (Sandbox Code Playgroud)
然后我想获得distmat维度为 3×4 的距离矩阵,其中元素是来自or …
问题:如何有效计算 n 维中两个轴对齐框之间的最小距离?
框格式:框 A 和 B 由它们的最小点和最大点 A_min、A_max、B_min、B_max 给出,每个点都是一个 n 维向量。也就是说,这些框可以在数学上写为以下区间的笛卡尔积:
A = [A_min(1), A_max(1)] x [A_min(2), A_max(2)] x ... x [A_min(n), A_max(n)]
B = [B_min(1), B_max(1)] x [B_min(2), B_max(2)] x ... x [B_min(n), B_max(n)]
注意:注意:我问这个问题,并自己回答,因为即使过了这么多年,这个问题(通常是 n 维形式)似乎也没有出现在 stackoverflow 中。一般而言,在互联网上很难找到这个问题的良好答案。经过谷歌搜索后,我最终不得不自己解决这个问题,并在这里发帖以避免未来的人遇到同样的麻烦。
我有两个点(x 1,y 1)和(x 2,y 2),它们代表我空间中两个实体的位置.我用毕达哥拉斯定理计算它们之间的欧几里得距离,一切都很美妙.但是,如果我的空间变得有限,我想在"包裹"地图接缝的点之间定义一个新的最短距离.例如,如果我有A点(10, 10)和B点(90,10),并且我的地图是100个单位宽,我想计算A和B之间的距离为20(从地图的右边缘到左边缘) ),而不是80,这是正常的欧几里德距离.
我认为我的问题是我使用的坐标系统并不适合我正在尝试做的事情,而且我的扁平方形地图更像是一个无缝的圆环形状.关于如何实现这种性质的系统以及从笛卡尔坐标来回转换的任何建议也将受到赞赏!
我们正在进行车辆计数项目(使用OpenCV).现在我们必须找到从一帧中物体的质心到相邻帧的欧几里德距离?在我们的项目中,我们已经完成了寻找质心的工作.
我正在编写一个程序来比较两个图像相互比较基于颜色和我使用欧几里德距离算法然而当我运行它并传入两个图像我得到一个距离,然后当我传入相同的图像,但反过来我得到一组完全不同的结果.
这是正常的还是答案应该是一样的?
我用来计算欧氏距离的陈述是:
distance = (int) Math.sqrt( (rgb1.getR()-rgb2.getR())^2
+ (rgb1.getG()-rgb2.getG())^2
+ (rgb1.getB()-rgb2.getB())^2
);
Run Code Online (Sandbox Code Playgroud) 我需要帮助才能知道我的块和网格的大小.我正在构建一个python应用程序来执行基于scipy的度量计算:Euclidean distance,Manhattan,Pearson,Cosine,加入其他.
该项目是PycudaDistances(https://github.com/vinigracindo/pycudaDistances).
它似乎与小数组一起工作得很好.当我进行更详尽的测试时,不幸的是它没有用.我下载了movielens set(http://www.grouplens.org/node/73).
使用Movielens 100k,我声明了一个有形状的数组(943,1682).也就是说,用户评价了943和1682部电影.不是分类器用户的电影我将值配置为0.
使用更大的阵列算法不再有效.我遇到以下错误:pycuda._driver.LogicError:cuFuncSetBlockShape失败:值无效.
研究这个错误,我找到了一个解释,告诉安德鲁支持512个线程加入和使用更大的块,有必要使用块和网格.
我想要一个帮助,使算法欧几里德距离数组适应从小型到巨型阵列的工作.
def euclidean_distances(X, Y=None, inverse=True):
X, Y = check_pairwise_arrays(X,Y)
rows = X.shape[0]
cols = Y.shape[0]
solution = numpy.zeros((rows, cols))
solution = solution.astype(numpy.float32)
kernel_code_template = """
#include <math.h>
__global__ void euclidean(float *x, float *y, float *solution) {
int idx = threadIdx.x + blockDim.x * blockIdx.x;
int idy = threadIdx.y + blockDim.y * blockIdx.y;
float result = 0.0;
for(int iter = 0; iter < %(NDIM)s; iter++) {
float x_e = x[%(NDIM)s * idy …Run Code Online (Sandbox Code Playgroud) 我有两点
x1 = (a1,b1,c1,d1,e1); //5 dimensional point
x2 = (a2,b2,c2,d2,e2); //5 dimensional point
Run Code Online (Sandbox Code Playgroud)
那么计算欧几里德dist的正确方法是什么?
d = sqrt(sqr(a1-a2)+sqr(b1-b2)+sqr(c1-c2)+sqr(d1-d2)+sqr(e1-e2))
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否pdist(X)会给我相同的结果?
这里X = (x1,x2)ie X是5x2矩阵.
我也希望结果采用方阵形式.
我有3D阵列
A = [[x1 y1 z1]
[x2 y2 z2]
[x3 y3 z3]]
Run Code Online (Sandbox Code Playgroud)
我必须找到每个点之间的欧几里德距离,这样我才能得到只有3个距离的输出(row0,row1),(row1,row2)和(row0,row2).
我有一些代码
dist = scipy.spatial.distance.cdist(A,A, 'euclidean')
Run Code Online (Sandbox Code Playgroud)
但它会以矩阵形式给出距离
dist= [[0 a b]
[a 0 c]
[b c 0]]
Run Code Online (Sandbox Code Playgroud)
我想要结果[a b c].
我在python中实现了k-nearest-neighbours算法,以对mnist数据库中随机选择的图像进行分类。但是,我发现距离函数非常慢:将10个测试图像的analisys与10k图像的训练集进行对比大约需要2分钟。图像的分辨率为28x28像素。由于我是python的新手,所以我觉得这可能会更快。该函数应该用于计算两个相同大小的灰度图像之间的欧式距离。
def calculateDistance(image1, image2):
distance = 0
for i in range(len(image1)):
for j in range(len(image1)):
distance += math.pow((image1[i][j]-image2[i][j]),2)
distance = numpy.sqrt(distance)
return distance
Run Code Online (Sandbox Code Playgroud) 我试图使用numpy使用以下代码计算坐标之间的差异:
X = np.random.random((1000, 3))
# using broadcasting to calculate to find pairwise diffrence
diff = X.reshape(1000, 1, 3) - X
D = (diff**2).sum(2)
Run Code Online (Sandbox Code Playgroud)
有人能解释一下上面两行是做什么的吗?我不明白这是如何计算坐标的欧氏距离的.