我在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) 我有两个x - y坐标数组,我想找到一个数组中每个点与另一个数组中所有点之间的最小欧几里德距离.阵列的大小不一定相同.例如:
xy1=numpy.array(
[[ 243, 3173],
[ 525, 2997]])
xy2=numpy.array(
[[ 682, 2644],
[ 277, 2651],
[ 396, 2640]])
Run Code Online (Sandbox Code Playgroud)
我目前的方法遍历每个坐标xy的xy1计算之间的协调距离和其他坐标.
mindist=numpy.zeros(len(xy1))
minid=numpy.zeros(len(xy1))
for i,xy in enumerate(xy1):
dists=numpy.sqrt(numpy.sum((xy-xy2)**2,axis=1))
mindist[i],minid[i]=dists.min(),dists.argmin()
Run Code Online (Sandbox Code Playgroud)
有没有办法消除for循环,并以某种方式在两个数组之间进行逐元素计算?我设想生成一个距离矩阵,我可以在其中找到每行或每列中的最小元素.
另一种看待问题的方法.假设我将xy1(长度为m)和xy2(长度为p)连接成xy(长度为n),并存储原始数组的长度.从理论上讲,我应该能够从那些我可以获取mxp子矩阵的坐标生成一个nxn距离矩阵.有没有办法有效地生成这个子矩阵?
我需要有效地计算给定数组中每个点到另一个数组中每个其他点的欧几里德加权距离。这是我的代码,它按预期工作:x,yx,y
import numpy as np
import random
def rand_data(integ):
'''
Function that generates 'integ' random values between [0.,1.)
'''
rand_dat = [random.random() for _ in range(integ)]
return rand_dat
def weighted_dist(indx, x_coo, y_coo):
'''
Function that calculates *weighted* euclidean distances.
'''
dist_point_list = []
# Iterate through every point in array_2.
for indx2, x_coo2 in enumerate(array_2[0]):
y_coo2 = array_2[1][indx2]
# Weighted distance in x.
x_dist_weight = (x_coo-x_coo2)/w_data[0][indx]
# Weighted distance in y.
y_dist_weight = (y_coo-y_coo2)/w_data[1][indx]
# Weighted …Run Code Online (Sandbox Code Playgroud)