Python 查找两个阵列PLOT1和PLOT2之间的最小距离,并将索引存储在该点所在的位置
有两个数组Plot1的形式为Python 查找两个阵列PLOT1和PLOT2之间的最小距离,并将索引存储在该点所在的位置,python,arrays,numpy,Python,Arrays,Numpy,有两个数组Plot1的形式为Plot1=[1.0,2.0,3.0](1X4),我们已找到Plot1与plot2的最小距离(plot2中存储了多个数组)。我们希望O/p为 i) 图2所有点之间的最小距离(Smin) ii)存储点的索引 iii)存储点的阵列索引 我的代码在plot2中包含一个数组时有效。但在plot2中包含多个数组时失败 plot2 = np.array([[(1.0, 4.0, 5.0),(4.0, 7.0, 90.0),(1.0, 4.0, 5.0)], [(
Plot1=[1.0,2.0,3.0](1X4)
,我们已找到Plot1与plot2的最小距离(plot2中存储了多个数组)。我们希望O/p为
i) 图2所有点之间的最小距离(Smin)
ii)存储点的索引
iii)存储点的阵列索引
我的代码在plot2中包含一个数组时有效。但在plot2中包含多个数组时失败
plot2 = np.array([[(1.0, 4.0, 5.0),(4.0, 7.0, 90.0),(1.0, 4.0, 5.0)],
[(2.9,3.2,3.3),(2.3,2.6,5.5),(2.4,3.5,4.4)],
[(2.9,3.2,3.3),(2.3,2.6,5.5),(2.4,3.5,4.4)]])
所以我的工作代码是
import numpy as np
plot1 = [1.0, 2.0, 3.0]
plot2 = [(1.0, 4.0, 5.0),
(4.0, 7.0, 90.0),
(1.0, 4.0, 5.0),
(-1.0, -4.0, -5.0)]
indexes = []
for i in range(len(plot2)): # To get one element at a time from plot2
plotk = plot2[i]
S = np.linalg.norm(np.array(plot1) - np.array(plotk))
print("Distance between plot1 and plotk is %f" %(S)) # euclidian distance is calculated
if (i == 0):
Smin = S
Sminant = S
indexes.append(i)
else:
if (S < Sminant):
Smin = S
Sminant=Smin
indexes = []
indexes.append(i)
elif (S == Sminant):
indexes=[]
indexes.append(i)
print('indexes:')
print(indexes)
for i in range(len(indexes)):
print("VAlues of Slist with min \n",indexes[i], plot2[indexes[i]],Smin)
将numpy导入为np
图1=[1.0,2.0,3.0]
图2=[(1.0,4.0,5.0),
(4.0, 7.0, 90.0),
(1.0, 4.0, 5.0),
(-1.0, -4.0, -5.0)]
索引=[]
对于范围内的i(len(plot2)):#从plot2一次获取一个元素
plotk=plot2[i]
S=np.linalg.norm(np.array(plot1)-np.array(plotk))
打印(“plot1和plotk之间的距离为%f”%(S))#计算欧几里得距离
如果(i==0):
Smin=S
Sminant=S
附加索引(i)
其他:
如果(S
您能做的是,我编辑我的答案,以便它回答您的问题:
row,col,n=plot2.shape
S=np.empty([row,col])
for i_row in range(row):
for i_col in range(col):
plotk = plot2[i_row,i_col]
S[i_row,i_col] = np.linalg.norm(np.array(plot1) - np.array(plotk))
np.min(S)
ind = np.unravel_index(np.argmin(S, axis=None), S.shape)
您使用
导入numpy作为np
但不使用它。。。让我们看看我们可以从大量的numpy
方法中使用什么(关键是方法…)
最终可以使用索引
获得最小值
In [17]: adiff[range(adiff.shape[0]), indices]
Out[17]: array([0., 3., 0., 2.])
范围(adiff.shape[0])
依次给出每行的编号,与索引的内容相匹配,该索引指示每行中包含最小值的列。但它不会给出存储点的数组(或组)的索引
In [17]: adiff[range(adiff.shape[0]), indices]
Out[17]: array([0., 3., 0., 2.])