gpt4 book ai didi

python - 在 numpy ndarray 中找到两个最接近的值

转载 作者:行者123 更新时间:2023-12-04 16:36:45 25 4
gpt4 key购买 nike

我有一个像这样的 numpy ndarray

np.array(
[[40.26164428, 63.50590524, 58.30951895],
[50.99019514, 69.0651866 , 60.44005295],
[20.24845673, 14.31782106, 58.52349955],
[54.58937626, 53.03772242, 21.09502311],
[56.75385449, 57.5847202 , 1.41421356]])

(注意:我生成的数组总是不同的形状(这个数组的形状是 (5, 3) 但它可以是 (2, 2) (4, 1)... ),所以这不是 3D 坐标数组,它只是那样生成的)

我需要的是找到生成数组的两个最接近的值并返回它们的索引,在本例中,值是 58.3095189558.52349955,它们应该返回坐标 [0, 2] 和 [2, 2]

我试过使用 cKDtree,但这不是坐标数组,所以在这种情况下不起作用,我应该怎么做?

最佳答案

当有人指出单行代码时,我会感到尴尬,但这是一种方法。

我展平数组,然后对其进行排序,然后找到每个元素之间的增量。找到最小增量。现在,从排序后的数组中,我知道了两个最接近的元素的值。 argwhere 然后给我坐标。

import numpy as np

data = np.array(
[[40.26164428, 63.50590524, 58.30951895],
[50.99019514, 69.0651866 , 60.44005295],
[20.24845673, 14.31782106, 58.52349955],
[54.58937626, 53.03772242, 21.09502311],
[56.75385449, 57.5847202 , 1.41421356]])


order = np.sort(data.reshape(-1))
delta = np.diff(order)
am = np.argmin(delta)
print( np.argwhere(data == order[am]))
print( np.argwhere(data == order[am+1]))

输出:

C:\tmp>python x.py
[[0 2]]
[[2 2]]

关于python - 在 numpy ndarray 中找到两个最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68913288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com