Почему numpy.apply_along_axis кажется медленнее цикла Python?

Я не понимаю, когда функция numpy numpy.apply_along_axis () превосходит простую Цикл Python. Например, рассмотрим случай матрицы с множеством строк, и вы хотите вычислить сумму каждой строки:

x = np.ones([100000, 3])
sums1 = np.array([np.sum(x[i,:]) for i in range(x.shape[0])])
sums2 = np.apply_along_axis(np.sum, 1, x)

Здесь я даже использую встроенную функцию numpy, np.sum и однако вычисление sums1 (цикл Python) занимает менее 400 мс, а вычисление sums2 ( apply_along_axis ) занимает более 2000 мс (NumPy 1.6.1 в Windows). Для дальнейшего сравнения функция R rowMeans часто может сделать это менее чем за 20 мс (я почти уверен, что она вызывает код C), в то время как аналогичная функция R apply () может сделать это примерно за 600 мс.

9
задан Abiel 28 December 2011 в 06:48
поделиться