Идиоматическим путем список текущих дел/dict в Cython?

Путем документы Google делают это путем встраивания JavaScript в PDF, который говорит Acrobat Reader или любому другому совместимому читателю печатать его.

Вам был бы нужен инструментарий PDF, чтобы сделать это со случайным PDF.

37
задан ramanujan 6 October 2009 в 23:37
поделиться

3 ответа

Вы можете взглянуть на стандартный модуль array для Python, если он подходит для ваших настроек Cython. Я не уверен, поскольку никогда не использовал Cython.

3
ответ дан 27 November 2019 в 04:33
поделиться

Там нет способа получить собственные списки / диктовки Python со скоростью карты / вектора C ++ или даже где-то рядом. Это не имеет ничего общего с распределением или объявлением типа, а скорее оплачивает накладные расходы интерпретатора. Упомянутый вами пример (numpy) является расширением C и написан на C именно по этой причине.

0
ответ дан 27 November 2019 в 04:33
поделиться

Выполнение аналогичных операций в Python и C ++ часто может быть медленнее. list и dict на самом деле реализованы очень хорошо, но вы получаете много накладных расходов, используя объекты Python, которые являются более абстрактными, чем объекты C ++, и требуют гораздо большего поиска во время выполнения.

Между прочим, std :: vector реализован почти так же, как list . Однако std :: map на самом деле реализован таким образом, что многие операции выполняются медленнее, чем dict , поскольку его размер становится больше. Для подходящих больших примеров каждого из них dict преодолевает постоянный коэффициент, на который он медленнее, чем std :: map , и фактически выполняет такие операции, как поиск, вставка и т. Д., Быстрее.

Если вы хотите использовать std :: map и std :: vector , вам ничего не мешает. Вам придется обернуть их самостоятельно, если вы хотите открыть их для Python. Не удивляйтесь, если эта упаковка займет все или большую часть времени, которое вы надеялись сэкономить. Мне не известны какие-либо инструменты, которые сделают это для вас автоматическим.

Существуют вызовы C API для более детального управления созданием объектов. Вы можете сказать: «Составьте список хотя бы с таким количеством элементов», но это не улучшит общую сложность операции создания и заполнения вашего списка. Это, конечно, не сильно изменится позже, когда вы попытаетесь изменить свой список.

Мой общий совет:

  • Если вам нужен массив фиксированного размера (вы говорите об указании размера списка), вам может потребоваться что-то вроде массива numpy.

  • Я сомневаюсь, что вы получите какое-либо ускорение, которое захотите, используя std :: vector вместо list для общей замены в вашем коде. Если вы хотите использовать его за кулисами, он может дать вам удовлетворительный размер и улучшение пространства (я, конечно, не знаю без измерений, и вы тоже.;)).

  • dict действительно хорошо справляется со своей работой. Я определенно не стал бы пробовать вводить новый универсальный тип для использования в Python на основе std :: map , который имеет худшую алгоритмическую сложность во времени для многих важных операций и - по крайней мере в некоторых реализациях - оставляет некоторые оптимизации для пользователя, которые уже есть в dict .

    Если бы мне нужно было что-то, что работало бы немного больше вроде std :: map , я бы, вероятно, использовал базу данных. Обычно это то, что я делаю, если вещи, которые я хочу сохранить в dict (или, если на то пошло, вещи, которые я храню в списке ), становятся слишком большими, чтобы мне было удобно хранить их в объем памяти. Python имеет sqlite3 в stdlib и драйверы для всех других доступных баз данных.

30
ответ дан 27 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: