У меня есть два одномерных вектора numpy va и vb, которые используются для заполнения матрицы путем передачи всех парных комбинаций в функцию.
na = len(va)
nb = len(vb)
D = np.zeros((na, nb))
for i in range(na):
for j in range(nb):
D[i, j] = foo(va[i], vb[j])
В нынешнем виде этот фрагмент кода выполняется очень долго из-за того, что va и vb относительно велики (4626 и 737). Однако я надеюсь, что это можно улучшить из-за того, что аналогичная процедура выполняется с использованием метода cdist из scipy с очень хорошей производительностью.
D = cdist(va, vb, metric)
Я, очевидно, знаю, что у scipy есть преимущество запуска этого фрагмента кода на C, а не на python, но я надеюсь, что есть какая-то функция numpy, о которой я не знаю, которая может выполнить это быстро.
outer... Или передавая сетку va и vb... - person Saullo G. P. Castro   schedule 31.10.2014np.meshgrid, а затемnp.vectorize, но улучшения производительности были минимальными. - person Michael Aquilina   schedule 31.10.2014vectorizeничего не делает с внутренностями вашегоfoo. Это просто оболочка, которая в конечном итоге вызываетfoo(a,b)с каждой парой скаляров. Это удобство, а не инструмент ускорения. - person hpaulj   schedule 31.10.2014