Скажите, что у меня есть фрагмент, например x[p:-q:n]
или x[::n]
. Я хочу использовать это для создания индекса, который будет передан в numpy.ufunc.reduceat(x, [p, p + n, p + 2 * n, ...])
или numpy.ufunc.reduceat(x, [0, n, 2 * n, ...])
. Каков самый простой и эффективный способ сделать это?Как можно генерировать индексы numpy.ufunc.reduceat из объекта Python Slice
0
A
ответ
3
Опираясь на комментарии:
In [351]: x=np.arange(100)
In [352]: np.r_[0:100:10]
Out[352]: array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
In [353]: np.add.reduceat(x,np.r_[0:100:10])
Out[353]: array([ 45, 145, 245, 345, 445, 545, 645, 745, 845, 945], dtype=int32)
In [354]: np.add.reduceat(x,np.arange(0,100,10))
Out[354]: array([ 45, 145, 245, 345, 445, 545, 645, 745, 845, 945], dtype=int32)
In [355]: np.add.reduceat(x,list(range(0,100,10)))
Out[355]: array([ 45, 145, 245, 345, 445, 545, 645, 745, 845, 945], dtype=int32)
In [356]: x.reshape(-1,10).sum(axis=1)
Out[356]: array([ 45, 145, 245, 345, 445, 545, 645, 745, 845, 945])
и время:
In [357]: timeit np.add.reduceat(x,np.r_[0:100:10])
The slowest run took 9.30 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 31.2 µs per loop
In [358]: timeit np.add.reduceat(x,np.arange(0,100,10))
The slowest run took 85.75 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 6.69 µs per loop
In [359]: timeit np.add.reduceat(x,list(range(0,100,10)))
The slowest run took 4.31 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 11.9 µs per loop
In [360]: timeit x.reshape(-1,10).sum(axis=1)
The slowest run took 5.57 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 11.5 µs per loop
reduceat
с arange
выглядит лучше, но это должно быть проверено на более реалистичных данных. Скорости не отличаются от этого размера.
Значение r_
заключается в том, что оно позволяет использовать удобную нотацию для резки; он находится в файле с именем index_tricks.py
.
С 10000 элемент x
, времена 80, 46, 238, 51.
Смежные вопросы
- 1. Создание объекта slice в python
- 2. Python - генерировать атрибуты объекта из списка
- 3. Как получить доступ к элементам объекта slice в python
- 4. Как получить координаты из объекта numpy slice
- 5. Список slice python
- 6. Почему назначение slice в dataframes учитывает индексы?
- 7. Как генерировать метамодель из объекта?
- 8. Можно ли генерировать случайные имена переменных объекта и возвращать их из метода python? Как?
- 9. Можно ли генерировать Facelets код из UIComponent объекта в JSFManagedBean
- 10. Генерировать таблицу из данных объекта
- 11. Как можно обнаружить «бесполезные» индексы?
- 12. Python - Можно ли генерировать узлы в цикле?
- 13. генерировать код python от известного объекта
- 14. получить соответствующие элементы индексы из строки объекта
- 15. Python array slice не работает как ожидалось
- 16. python array inclusive slice index
- 17. Python Array Slice With Comma?
- 18. python slice set in list
- 19. Python slice возвращает неправильные значения?
- 20. Можно ли динамически генерировать атрибут в объекте python?
- 21. Python slice how-to, я знаю кусочек Python, но как я могу использовать встроенный объект slice?
- 22. Можно ли генерировать переменные из списка?
- 23. Можно ли генерировать классы из xml-файла?
- 24. Python: динамически генерировать метод из строки?
- 25. Странно behavier с генерировать JSON из объекта
- 26. генерировать меню из объекта динамически angularjs
- 27. Генерировать эквивалентную DLL из общего объекта ELF
- 28. Можно ли объединить индексы Lucene.NET
- 29. Как ссылаться на индексы массива из другого класса или объекта?
- 30. IndexError: список индексы из ошибок Python диапазона
Почему бы просто не использовать 'range'? 'list (range (0, len (x), n))' – Psidom
Является ли это наиболее эффективным? –
Эффективно, если вам нужен список индексов. – Psidom