获取数组中与x值最接近的索引

2024-04-24 06:00:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数组(虽然长了很多):

array ['0.2742330338168506' '0']
      ['0.28529288153011745' '0']
      ['0.28595917620794253' '1']
      ['0.2874392369724381' '2']
      ['0.316557712713994' '2']
      ['0.32113534393276466' '3']
      ['0.3231108855082745' '3']
      ['0.3163219663513872' '3']

和数组values,这是第二列中每个值的平均值

 values['0.282346788535' '0.296778235123' '0.303451234094' '0.31941237861']

对于values中的第一项,我想在另一个数组的第一列中找到最接近的值的索引,其中第二列的值为0,对于values中的第二个值,在第二列的值为1的数组中找到最接近的值,依此类推


Tags: 数组array平均值values
1条回答
网友
1楼 · 发布于 2024-04-24 06:00:22

代码

a = np.array([[0.2742330338168506, 0],
      [0.28529288153011745, 0],
      [0.28595917620794253, 1],
      [0.2874392369724381, 2],
      [0.316557712713994, 2],
      [0.32113534393276466, 3],
      [0.3231108855082745, 3],
      [0.3163219663513872, 3]])
values = np.array([0.282346788535, 0.296778235123, 0.303451234094, 0.31941237861])

diff = np.abs(a[:,0,None] - values)
mask =  a[:,1,None] != np.arange(len(values))
diff[mask] = np.inf
idx = np.argmin(diff, axis=0)

结果

array([1, 2, 4, 5], dtype=int64)

解释

diff创建a[:,0]values中每个元素之间的绝对差矩阵

array([[0.00811375, 0.0225452 , 0.0292182 , 0.04517934],
       [0.00294609, 0.01148535, 0.01815835, 0.0341195 ],
       [0.00361239, 0.01081906, 0.01749206, 0.0334532 ],
       [0.00509245, 0.009339  , 0.016012  , 0.03197314],
       [0.03421092, 0.01977948, 0.01310648, 0.00285467],
       [0.03878856, 0.02435711, 0.01768411, 0.00172297],
       [0.0407641 , 0.02633265, 0.01965965, 0.00369851],
       [0.03397518, 0.01954373, 0.01287073, 0.00309041]])

mask创建形状相似的矩阵,其中第一列的值为True,其中a[:,1] != 0,第二列的值为a[:,1] != 1,等等

array([[False,  True,  True,  True],
       [False,  True,  True,  True],
       [ True, False,  True,  True],
       [ True,  True, False,  True],
       [ True,  True, False,  True],
       [ True,  True,  True, False],
       [ True,  True,  True, False],
       [ True,  True,  True, False]])

通过将这些值设置为无穷大,我们可以关注每列的相关值,以找到具有np.argmin()的最小值的索引

相关问题 更多 >