2024-09-29 20:26:32 发布
网友
我有一个具有15列的查询数据点,我有一个具有相同列(15)的熊猫数据框,我想找到数据框中与我的查询数据点最近的数据点。有人能在这方面指导我吗
例如: 查询数据点
[1, 2, 3, 4]
df
1 3 5 6 2 7 9 1 2 8 1 8 5 4 9 0 2 4 6 7
在这里,下面的行是最接近的,这与我希望检索到距离查询点最近的前n个数据点的方式相同
1 3 5 6 2 4 6 7
我尝试过聚类,但它太复杂了,我无法理解,KNN需要一个目标变量,所以需要您的帮助。谢谢
您可以使用欧几里德距离或L2Norm来计算数据帧的每一行与查询点之间的距离
df = pd.DataFrame([[1, 3, 5, 6], [2, 7, 9, 1], [2, 8, 1, 8], [5, 4, 9, 0], [2, 4, 6, 7]]) vec = [1, 2, 3, 4] dist = df.sub(vec, axis=1).pow(2).sum(axis=1).pow(.5)
这就给出了输出
0 3.000000 1 8.426150 2 7.549834 3 8.485281 4 4.795832 dtype: float64
您可以选择最短的n个距离,这将为您提供距查询点最近的n个数据点的位置
或者您可以使用np.linlag.norm
np.linlag.norm
dist = np.linalg.norm(source.to_numpy() - vec, axis=1)
这将为您提供输出
array([3. , 8.42614977, 7.54983444, 8.48528137, 4.79583152])
请查看此question的答案
您可以尝试:
query_point = [1, 2, 3, 4] n = 2 n_closest_points = df.loc[(df - query_point).pow(2).sum(axis=1).nsmallest(n).index]
给予
0 1 2 3 0 1 3 5 6 4 2 4 6 7
我们通过链式减法(广播)、平方(pow)和求和(sum)得到每行和query_point之间的平方距离之和。然后,通过获取距离最小的行(nsmallest),我们需要n最近的行。然后给出一个序列,其值为平方距离,索引指示所需行,因此我们获取其索引并将其放入原始df(.loc)
pow
sum
query_point
nsmallest
n
.loc
您可以使用欧几里德距离或L2Norm来计算数据帧的每一行与查询点之间的距离
这就给出了输出
您可以选择最短的n个距离,这将为您提供距查询点最近的n个数据点的位置
或者您可以使用
np.linlag.norm
这将为您提供输出
请查看此question的答案
您可以尝试:
给予
我们通过链式减法(广播)、平方(
pow
)和求和(sum
)得到每行和query_point
之间的平方距离之和。然后,通过获取距离最小的行(nsmallest
),我们需要n
最近的行。然后给出一个序列,其值为平方距离,索引指示所需行,因此我们获取其索引并将其放入原始df(.loc
)相关问题 更多 >
编程相关推荐