Быстрое (er) причудливое индексирование и сокращение?

Я пытаюсь использовать и ускорять причудливое индексирование для «объединения» двух массивов и суммирования по одной из осей результатов.

Что-то вроде этого:

$ ipython In [1]: import numpy as np In [2]: ne, ds = 12, 6 In [3]: i = np.random.randn(ne, ds).astype('float32') In [4]: t = np.random.randint(0, ds, size=(1e5, ne)).astype('uint8') In [5]: %timeit i[np.arange(ne), t].sum(-1) 10 loops, best of 3: 44 ms per loop 

Есть ли простой способ ускорить утверждение в In [5] ? Должен ли я идти с OpenMP и что-то вроде scipy.weave или Cython 's prange ?

One Solution collect form web for “Быстрое (er) причудливое индексирование и сокращение?”

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

 In [1]: a = np.random.randn(12,6).astype(np.float32) In [2]: c = np.random.randint(0,6,size=(1e5,12)).astype(np.uint8) In [3]: r = np.arange(12) In [4]: %timeit a[r,c].sum(-1) 10 loops, best of 3: 46.7 ms per loop In [5]: rr, cc = np.broadcast_arrays(r,c) In [6]: flat_index = rr*a.shape[1] + cc In [7]: %timeit a.take(flat_index).sum(-1) 100 loops, best of 3: 5.5 ms per loop In [8]: (a.take(flat_index).sum(-1) == a[r,c].sum(-1)).all() Out[8]: True 

Я думаю, что только другой способ, которым вы будете видеть большую часть улучшения скорости, помимо этого, – написать собственное ядро ​​для графического процессора, используя что-то вроде PyCUDA .

Interesting Posts

Эквивалент string.ascii_letters для строк unicode в python 2.x?

Запрос POST для Tastypie возвращает заголовок местоположения без SSL

Как преобразовать список в csv в python

scikit-learn, добавлять функции к векторизованному набору документов

boto set_contents_from_filename утечка памяти

PyCrypto установить, скопировав папку «lib» на Windows7 64bit

Создание тепловой карты с использованием трехмерных данных в matplotlib

Pymongo отказывается от подключения 27017

Идентичность Python: множественное расстройство личности, необходимость сокращения кода

Как создать кнопку на холсте tkinter?

Python: Почему я не могу изменить текущую область действия внутри функции с помощью locals ()?

Поиск неиспользуемого кода Django для удаления

Как правильно писать пути к файлу в Python

Если итератор python возвращает итерируемые объекты, как я могу связать эти объекты с одним большим итератором?

альтернатива getatime для поиска последнего доступа к файлу в python

Python - лучший язык программирования в мире.