LINUX.ORG.RU
ФорумTalks

Быстрый и логичный пузон

 ,


1

2

Сижу оптимизирую питонокод и тихо фигею. Ниже часть выкладок (тестовых, просто смотрю как лучше тот или иной кусок сделать) от которых больше всего опух

  • np.zeros(5)[list(range(1,3))] - 2.4 us
  • np.zeros(5)[range(1,3)] - 5.1 us

а ведь вроде list() это плюс еще один вызов. ну это еще ладно, генераторы лучше убрать в чулан, но вот дальше

def test1():
    a = np.zeros(5)
    c = list(range(1,3))
    for _ in range(0, 1000):
        a[c] += 5
def test2():
    a = np.zeros(5)
    c = list(range(1,3))
    for _ in range(0, 1000):
        a[c] = np.add(a[c], 5)
  • test1() - 4ms
  • test2() - 3ms (с a[c] = a[c] + 5 аналогично)

И судя по всем тестам оператор += в 90% случаев (кроме сложения целых чисел) тормознее чем тупое присвоение.

Веселее только то что если предварительно сделать что-то типа npadd = np.add, то работать оно будет еще чуть быстрее, потому что np.add каждый раз берет сначала указатель на np, а затем на add()

Или вот сейчас совсем вскрыло, хоть это вообще второй пузон и с быстродействием не связано:

>>> unicode(None)
u'None'
★★★★★

Последнее исправление: upcFrost (всего исправлений: 3)
Ответ на: комментарий от proud_anon

Ну тут надо разбираться, в чём дело: в Питоне или в NumPy

во взаимодействии пузона с сишными либами и не только. Хотя скажем судя по всему реализация += просто кривая

upcFrost ★★★★★
() автор топика
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от proud_anon

В оптимизаторе с питоном времени моей юности, который пытается оптимизировать синтетику. Если бы его волновала скорость чего-то реального, занялся бы делом.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

с питоном времени моей юности

Python 3.5.2 (default, Nov 17 2016, 17:05:23)

вставная челюсть не жмет?

upcFrost ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.