2012-03-15 3 views
1

У меня проблемы с реализацией случайных лесов, над которыми я работаю в Python. Задолго помню, я хорошо знаю, что Python не предназначен для высокоэффективного хруста. Выбор был основан скорее на желании получить более глубокое понимание и дополнительный опыт в Python. Я бы хотел найти решение, чтобы сделать его «разумным».Повышение эффективности копирования больших наборов данных Python

Сказанное, мне любопытно, если кто-нибудь может внести некоторые улучшения в улучшение производительности моей реализации. Запустив его через профилировщик, очевидно, что самое время тратится на выполнение команды «добавить» и мою операцию разделения данных. По сути, у меня есть большой набор данных, реализованный как матрица (скорее, список списков). Я использую этот набор данных для построения дерева решений, поэтому я буду разделять на столбцы с наибольшим коэффициентом усиления информации. Разделение состоит из создания двух новых наборов данных, содержащих только строки, соответствующие некоторым критериям. Новый набор данных генерируется путем инициализации двух пустых списков и добавления соответствующих строк к ним.

Я не знаю размер списков заранее, поэтому я не могу предварительно выделить их, если только невозможно предусмотреть обильное пространство списка, но затем обновить размер списка в конце (я не видел это упоминается где угодно).

Есть ли лучший способ справиться с этой задачей в python?

+0

Эффективное число хруст в Python может быть выполнено с помощью Numpy и Scipy. –

ответ

1

Без просмотра ваших кодов очень сложно дать какие-либо конкретные предложения, так как оптимизация зависит от кода, который меняется в каждом конкретном случае. Однако есть еще некоторые общие вещи:

  1. Просмотрите свой алгоритм, попробуйте уменьшить количество циклов. Кажется, у вас много петель, и некоторые из них глубоко встроены в другие циклы (я думаю).
  2. если возможно использовать более эффективные служебные модули, такие как itertools вместо наивных кодов, написанных вами.
  3. Если вы заинтересованы, попробуйте PyPy (http://pypy.org/), это ориентированная на производительность реализация Python.