将每条记录替换为numpy数组/pandas数据帧中最接近的记录



因此,情况是:

我有两个numpy2d数组/pandas数据帧(不重要,我将使用什么(。每个数组包含大约10个6记录。每条记录是一行,包含10个浮点数。

我需要将第二个数组(数据帧(中的每一行替换为第一个表中的行,与之相比,第一个表的MSE最小;对于";循环,但听起来慢得可怕。有没有我看不到的又好又漂亮的numpy/pandas解决方案?

第S页例如:

arr1:[[1,2,3],[4,5,6],[7,8,9]]

arr2:[[9,10,11],[3,2,1],[5,5,5]]

结果应该是:[[7,8,9],[1,2,3],[4,5,6]]

在这个例子中,每个记录中有3个数字,总共有3个记录。我每条记录中有10个数字,总共有大约1000000条记录

使用最近邻方法在这里应该有效,尤其是如果您想减少计算时间。

我将给出一个使用scikit-learnNearestNeighbor类的简单示例,尽管可能还有更有效的方法。

import numpy as np
from sklearn.neighbors import NearestNeighbors
# Example data
X = np.random.randint(1000, size=(10000, 10))
Y = np.random.randint(1000, size=(10000, 10))
def map_to_nearest(source, query):
neighbors = NearestNeighbors().fit(source)
indices = neighbors.kneighbors(query, 1, return_distance=False)
return query[indices.ravel()]
result = map_to_nearest(X, Y)

我注意到这是在计算欧氏距离,而不是MSE。这对于找到最接近的匹配应该很好,因为MSE是欧几里得距离的平方。

最新更新