2017-01-21 8 views
0

Я пытаюсь получить максимальное значение каждой строки матрицы массива numpy. Я хотел бы добиться этого эффективно, и я придумал следующие две идиомы для этого. Мой вопрос в том, есть ли разница в производительности между двумя способами?Разница между np.max (x, axis = 1) и x.max (ось = 1) для массива numpy

x = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
#array([[1, 2, 3], 
#  [4, 5, 6], 
#  [7, 8, 9]]) 

np.max(x,axis = 1) 
#array([3, 6, 9]) 

x.max(axis = 1) 
#array([3, 6, 9]) 

ответ

1

Я тестировал его в записной книжке, и это, кажется, ваш второй метод немного быстрее:

import numpy as np 
x = np.array([[1,2,3],[4,5,6],[7,8,9]]) 

Первый метод:

%%timeit 
np.max(x,axis = 1) 

The slowest run took 11.75 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 4.71 µs per loop 

Второй метод:

%%timeit 
x.max(axis = 1) 

The slowest run took 12.81 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 3.71 µs per loop 

Предположительно, это потому, что для первого вы вызовете модуль numpy, тогда как для второго он уже находится в объекте.

Однако я бы рекомендовал не пытаться оптимизировать такие мелочи и сначала посмотреть, если вы сделали все остальное (использовали ли вы компилятор, например Numba, использовали ли вы профилировщик, чтобы увидеть, какая часть вашего кода замедляется вы вниз и т. д.)

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