有2个数组Plot1的格式为plot1 = [1.0, 2.0, 3.0] (1X4)
,我们有tp找到plot1与plot2的最小距离,(plot2中有多个数组存储在其中)。我们希望O / P为
i)plot2(Smin)中所有点之间的最小距离
ii)存储点的索引
iii)存储点的阵列索引
当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)
答案 0 :(得分:0)
你可以做什么,我编辑我的答案,以便回答你的问题:
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)
答案 1 :(得分:0)
你使用import numpy as np
但不使用它......让我们看看我们可以在numpy
方法的大量工具中使用什么(关键是argmin
方法。 。)
In [10]: from numpy import abs, argmin, array
In [11]: plot1 = array([1.0, 2.0, 3.0])
...: plot2 = array([(1.0, 4.0, 5.0),
...: (4.0, 7.0, 90.0),
...: (1.0, 4.0, 5.0),
...: (-1.0, -4.0, -5.0)])
In [12]: adiff = abs(plot1-plot2)
In [13]: adiff
Out[13]:
array([[ 0., 2., 2.],
[ 3., 5., 87.],
[ 0., 2., 2.],
[ 2., 6., 8.]])
In [14]: indices = argmin(adiff, axis=1)
In [15]: indices
Out[15]: array([0, 0, 0, 0])
最终可以使用indices
来获得最小值
In [17]: adiff[range(adiff.shape[0]), indices]
Out[17]: array([0., 3., 0., 2.])
range(adiff.shape[0])
轮流显示每一行的数量,与indices
的内容相匹配,表示每行中包含最小值的列。