[英]Replace each record with closest in numpy array/pandas dataframe
所以,情况是:
我有两个 numpy 二维数组/熊猫数据帧(没关系,我将使用什么)。每个记录大约包含 10 6条记录。每条记录是一行,有 10 个浮点数。
我需要用第一个表中的行替换第二个数组(数据帧)中的每一行,与它相比,它具有最小的 MSE。 我可以用“for”循环轻松做到这一点,但听起来慢得可怕。 有没有我看不到的漂亮漂亮的 numpy/pandas 解决方案?
PS 例如:
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-learn
的NearestNeighbor
class给出一个简单的示例,尽管可能有更有效的方法可以做到这一点。
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 是平方欧几里得距离。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.