Есть ли более быстрый эквивалент fractions
модуля, что-то вроде cFractions
модуля, так же, как есть cDecimal
модуль, который является более быстрым эквивалентом Decimal
модуля? Модуль fractions
работает слишком медленно.быстрее фракция модуль питона
ответ
Я ничего не смог найти. Вы можете сделать это. http://docs.python.org/extending/extending.html
Быстрый поиск по фракциям в c дал мне http://www.spiration.co.uk/post/1400/fractions-in-c---a-rational-arithmetic-library. Используйте 2-й пост, он также обрабатывает отрицательные числа.
Но это может быть не то, что вам нужно, и вы можете найти что-то еще. Если вы не хотите расширять python, вы должны придерживаться фракций, если вы не можете найти никого, у кого есть модуль cFractions. Прости.
Использование http://code.google.com/p/gmpy/
Он использует mutliple точности библиотеку GMP для быстрого и рационального целого числа арифметических действий.
Примечание: Я также являюсь сопровождающим.
Это выглядит потрясающе - есть ли способ иметь класс фракций в gmpy2, который работает как mpr, но поддерживает __repr__ и другие особенности фракций. Фракция? Мне бы хотелось иметь возможность делать условный импорт - если gmpy2 существует, то «из gmpy2 import Fraction« else »из фракции import Fraction»? –
'cDecimal' был предназначен для точной замены' Decimal', поэтому с использованием одного и того же имени. Тип 'mpq' в' gmpy2' пытается предложить те же возможности, что и тип 'Fraction', но он использует имя реального типа для' repr'. Поскольку 'gmpy2' не может быть включен в Python по причинам лицензирования, я планирую сохранить имена разными. Вы можете написать простой класс-оболочку, который изменит форматирование. – casevh
Спасибо за предложение. Я не понимал различий в лицензировании. –
К сожалению, нет эквивалента c, не требующего скомпилированной внешней зависимости. В зависимости от ваших потребностей сущность, которую я сделал: https://gist.github.com/mscuthbert/f22942537ebbba2c31d4 может помочь.
Он предоставляет функцию opFrac(num)
, которая опционально преобразует int, float или Fraction в поплавок или фракцию с ограничением знаменателя (я использую 65535, потому что я работаю с небольшими фракциями); если float может быть точно представлен в двоичном виде (т. е. он кратен некоторой мощности двух знаменателей), он оставляет его в покое. В противном случае он преобразует его в фракцию. Аналогично, если фракция точно представима в двоичном выражении, мы преобразуем ее в float; иначе мы оставим это в покое.
Звонок Fraction(float).limit_denominator(x)
вызывается в вспомогательную функцию, _preFracLimitDenominator
, что создает только один объект Fraction
, а не три нормально созданных вызова.
Варианты использования для этого сустава довольно мало, но там, где они существуют, результаты впечатляют. Для моего проекта, music21, мы работаем в основном с нотами, которые обычно помещаются в ритм (целое) или половину, четверть, восьмой и т. Д. Beat (точно представляемые в двоичном формате), но в более редких случаях, когда заметки размещаются (смещение) или длительность, которая составляет, скажем, 1/3 или 1/5 бита, мы столкнулись с большими проблемами преобразования с плавающей запятой, которые привели к неясным ошибкам. Наш набор тестов работал в течение 350 секунд с использованием смещений с плавающей запятой и продолжительности. Переключение всего на Фракции заработало время до 1100 секунд - совершенно неприемлемо. Переключение на дополнительные фракции с быстрым созданием фракций привело к возврату времени на 360 секунд или только к достижению 3% производительности.
Если вы можете иметь дело с иногда работая с поплавками, а иногда и с фракциями, это может быть путь.
- 1. модуль питона
- 2. Импортирование модуль питона
- 3. Импорт модуль питона подталкивание
- 4. Добавить внешний модуль питона
- 5. Установка MySQLDb питона модуль
- 6. питона установить модуль apiclient
- 7. модуль питона переменной спутанность
- 8. Установка win32gui модуль питона
- 9. Runing модуль питона пакета
- 10. питона -> модуль многопроцессорной
- 11. Удалить импортируемого модуль Питона
- 12. Hook Функциональный модуль питона
- 13. HTML модуль питона
- 14. Алиас в модуль питона
- 15. Apache фракция исключение: «Фракция разделить, не должен быть равен нулю»
- 16. Загрузочный модуль питона от встроенного
- 17. странно выход питона перевести модуль
- 18. Cython: доля модуль чистого питона
- 19. Heroku: проблема импорта модуль питона
- 20. питона модуль импорта работать глобально
- 21. Хороший модуль питона рисовать картинки
- 22. подпроцесс модуль на питона FileNotFoundError
- 23. Нет модуль с именем «...» питона
- 24. Фракция округления в Oracle
- 25. типа Фракция не имеет
- 26. Двоичная фракция в рубине
- 27. RegEx Decimal или фракция
- 28. Сканер фракция Sum «Формула»
- 29. Частичная фракция отделяется()
- 30. Max Float Фракция
Сделать это непросто, кажется, потому что я не знаю, как бы я обрабатывал сколь угодно большие числа в C, как в python. Такая же проблема со второй ссылкой - она работает только до тех пор, пока числитель и знаменатель находятся в пределах 4 бит (или 8 бит при максимальном). –
Хорошо, я не так хорош в математике: PI просто дал вам то, что я нашел;) – thabubble