Python 查找两个阵列PLOT1和PLOT2之间的最小距离,并将索引存储在该点所在的位置

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的形式为
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.])