2015-06-29 4 views
0

У меня есть таблица поиска в виде массива 2d и список индексов (в виде двух массивов 1d xs, ys), на которых я хотел бы оценить поиск Таблица. Как это сделать быстро?julia быстрый поиск списка значений массива

Это стандартная проблема, однако я ничего не нашел о поиске значений массива в общем списке индексов (например, не декартовом продукте) в docs. Я попробовал

result = zeros((10^6,)) 
for i in [1:10^6] 
    x = xs[i] 
    y = ys[i] 
    result[i] = lookup[x, y] 
end 

Кроме того, чтобы выглядеть немного громоздким, этот код также в 10 раз медленнее, чем эквивалентный код. Также он выглядит как стандартная проблема, однако я ничего не нашел о поиске значений массива в общем списке индексов (например, не декартовом продукте) в docs.

Итак, что было бы быстрой альтернативой вышеуказанному коду?

+3

Это медленно, потому что оно не находится внутри функции. – tholy

+0

ok избегать глобальных переменных в извлеченном уроке скорости. –

ответ

2

Вы можете попробовать broadcast_getindex (см. http://julia.readthedocs.org/en/latest/stdlib/arrays/#Base.broadcast_getindex).

В противном случае, похоже, ваш код должен быть довольно эффективным, если вы только что изменили [1:10^6] на 1:10^6.

+3

Также не забудьте обернуть его функцией, а не работать в глобальной области. Это будет собака медленная: http://julia.readthedocs.org/en/latest/manual/performance-tips/#avoid-global-variables – StefanKarpinski

+0

Спасибо, обертывая ее в функцию и итерации по UnitRange вместо массива дает примерно такая же скорость, как и в numpy. Посмотрите в broadcast_getindex дальше. –

Смежные вопросы