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