Найти - Пользователи
Полная версия: найти k ближайших векторов
Начало » Python для экспертов » найти k ближайших векторов
1
mrgloom
надо найти k ближайших векторов
пример
data = np.random.rand(rows,cols)
vec= np.random.rand(1,cols)
d = ((data-vec)**2).sum(axis=1)  # compute distances
ndx = d.argsort()

затем я могу взять
ndx[:k]
, но как сделать если такая ситуация?
d1 = ((data1-vec)**2).sum(axis=1)  # compute distances
ndx1 = d1.argsort()
d2 = ((data2-vec)**2).sum(axis=1) # compute distances
ndx2 = d2.argsort()

т.е. мне надо каким то образом выделить k индексов + значения из d1 и из d2, (наверно) слить их и взять k лучших.
наверно надо использовать dict? как то заполнить dict индекс + значение, потом слить 2 dict и сортировать и взять k лучших
mrgloom
import numpy as np
import time
rows = 10000
cols = 1000
batches = 5
k= 10
fp = np.memmap('C:/memmap_test', dtype='float32', mode='w+', shape=(rows*batches,cols))
vec= np.random.rand(1,cols)
t0= time.time()
d = np.empty((rows*batches,))
for i in range(batches):
    d[i*rows:(i+1)*rows] = ((fp[i*rows:(i+1)*rows]-vec)**2).sum(axis=1)
ndx = d.argsort()
print (time.time()-t0)
print ndx[:k]

такой подход работает, только всё упирается в то что d надо держать в памяти + на непонятные ограничения самого memmap на размер массивов на х32.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB