簡體   English   中英

將每條記錄替換為 numpy 數組/熊貓 dataframe 中最接近的記錄

[英]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-learnNearestNeighbor 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM