【问题标题】:Replace each record with closest in numpy array/pandas dataframe用 numpy 数组/熊猫数据框中最接近的记录替换每条记录
【发布时间】:2020-11-29 15:42:34
【问题描述】:

所以,情况是:

我有两个 numpy 2d 数组/pandas 数据帧(没关系,我将使用什么)。每个记录大约包含 106 条记录。每条记录是一行,有 10 个浮点数。

我需要用第一个表中的行替换第二个数组(数据帧)中的每一行,与它相比,它具有最小的 MSE。我可以用“for”循环轻松做到这一点,但听起来慢得可怕。有没有我看不到的漂亮漂亮的 numpy/pandas 解决方案?

附言 例如:

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 条记录

【问题讨论】:

  • 你能给我们一些测试数据和你做过的任何尝试吗?
  • @DerekEden 你去。尝试......嗯,只有简单的解决方案,计算第二张表上每条记录的每个 MSE。

标签: python pandas numpy


【解决方案1】:

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

我将举一个使用scikit-learn's 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 是平方欧几里德距离。

【讨论】:

  • 好的,对我来说非常好的解决方案。我期望不太具体的解决方案,稍后尝试不同的指标,但现在可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2019-09-23
  • 2018-12-12
相关资源
最近更新 更多