如何解决获取数组中最接近 x 的值的索引
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 的数组中,依此类推。
解决方法
代码
a = np.array([[0.2742330338168506,0],[0.28529288153011745,[0.28595917620794253,1],[0.2874392369724381,2],[0.316557712713994,[0.32113534393276466,3],[0.3231108855082745,[0.3163219663513872,3]])
values = np.array([0.282346788535,0.296778235123,0.303451234094,0.31941237861])
diff = np.abs(a[:,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
where a[:,1] != 0
,第二列的值 where a[:,1] != 1
等>
array([[False,True,True],[False,[ True,False,False],False]])
通过将这些值设置为无穷大,我们可以专注于每列的相关值,用np.argmin()
找到最小值的索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。