Предотвращение явного зацикливания при применении сложной функции к массиву NumPy - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь перебрать массив np.ar с нетривиальной функцией, принимая n-элемент массива и некоторые другие параметры.Тем не менее, я заметил, что до сих пор самый эффективный способ - это использовать понимание списков, есть ли другой более быстрый способ сделать это?функция «map», кажется, не работает быстрее, и я не могу поверить, что явное зацикливание является самым быстрым способом ... Ниже приведен некоторый тестовый код и игрушечные данные.

import numpy as np
from sklearn.neighbors import NearestNeighbors
from functools import partial

input_data = np.array([[207843.5, 468331.5],
       [209827.5, 469081.5],
       [209572.5, 468870.5],
       [209327.5, 468720.5],
       [207722.5, 468209.5]])

coordinates = np.array([
       [194072.430, 440034.24      ],
        [194172.74      , 440054.48      ],
       [209828.5, 469083.5],
       [194166.670, 440062.43      ],
       [194163.64      , 440066.4       ],
       [209327.5, 468720.5],
       [194145.431, 440090.24      ],
       [194195.43, 440092.24      ]])

nbrs = NearestNeighbors(n_neighbors=1,
                        algorithm='ball_tree', leaf_size = 15).fit(coordinates)


def fun(measure,
        nbrs,
        coordinates
                ):
    distances, indices = nbrs.kneighbors(measure.reshape(1,-1))
    idx_closest = indices[0,0] 
    idx_right = idx_closest + 1 
    idx_left = idx_closest - 1 
    lowest, highest = coordinates[idx_left],  coordinates[idx_right]
    return lowest , highest

# 2.01 ms
%timeit [fun(measure,nbrs, coordinates) for measure in input_data]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...