我有一个数组 S(i),它包含 x 坐标 j 的所有接近 i 的索引值,即如果 S(1) = {2,3} 这意味着 x2 和 x3 接近x1。我总共有 S(1), ..., S(N) 个集合。
所以这部分代码工作正常:
arr = np.array([[1,3], [2,8],[3,1],[6,18], [9,8]])
arr = [item[0] for item in arr] #Extract x-coordinates
def Si(x): #This is the set i want to use
return [[j for j in range(len(x)) if np.abs(x[j] - x[i]) < 2] for i in range(len(x))]
现在我有 j 的下标,我想计算 S(i) 中 (x_i,y_i) 到每个 (x_j,y_j) 之间的欧几里德距离,例如对于 i=1,如果 S(1) = { 7},求(x_1, y_1)和(x_7, y_7)之间的距离,对于i=2,如果S(2) = {3,9},求(x_2,y_2)和(x_3,y_3)之间的距离和(x_2,y_2) 和 (x_9,y_9) 并对每个 i 重复。
我不知道如何实现这一点,我真的很困惑!这是一个欧几里得距离代码,它为数组中的所有值找到它,但不在我想要的集合中。
def euc_dist(arr):
arr_x = (arr[:,0,np.newaxis].T - arr[:,0,np.newaxis])**2 ##x-coordinates
arr_y = (arr[:,1,np.newaxis].T - arr[:,1,np.newaxis])**2 ##y-coordinates
arr = np.sqrt(arr_x + arr_y)
return arr
答案 0 :(得分:0)
这应该有效:
S = Si(arr) # get the array
def my_fn(i): # take the value of i
euc_dists = []
for j in S[i]: # iterate over j's in S[i]
if i!= j:
dist = np.linalg.norm(arr[i]-arr[j]) # euclidean distance
euc_dists.append(dist)
return euc_dists