Состоялся (https://www.mail-archive.com/python-announce-list@pytho... релиз Python-библиотеки для научных вычислений NumPy 1.17 (http://www.numpy.org/), ориентированной на работу с многомерными массивами и матрицами, а также предоставляющей большую коллекцию функций с реализацией различных алгоритмов, связанных с использованием матриц. NumPy является одной из наиболее востребованных библиотек, применяемых для научных расчётов. Код проекта написан на языке Python с применением оптимизаций на языке Си и распространяется (https://github.com/numpy/numpy/) под лицензией BSD.
Выпуск NumPy 1.17 примечателен (https://github.com/numpy/numpy/blob/master/doc/release/1.17.... внесением оптимизаций, существенно повышающих производительность некоторых операций, и прекращением поддержки Python 2.7. Для работы теперь необходимо наличие Python 3.5-3.7. Среди других изменения:
- Реализация модуля FFT (Fast Fourier Transforms) для выполнения быстрого преобразования Фурье переведена с fftpack на более быстрый и точный pocketfft (https://gitlab.mpcdf.mpg.de/mtr/pocketfft).
- В состав включён новый расширяемый модуль
random, предлагающий на выбор четыре генератора псевдослучайных чисел (MT19937, PCG64, Philox и SFC64) и реализующий улучшенный метод формирования энтропии в условиях использования в параллельно выполняемых процессах.
- Добавлены алгоритмы поразрядной (radix) и гибридной (timsort (https://ru.wikipedia.org/wiki/Timsort)) сортировки, которые автоматически выбираются в зависимости от типа данных.
- По умолчанию включена возможность переопределения функций NumPy.
URL: https://www.mail-archive.com/python-announce-list@pytho...
Новость: https://www.opennet.me/opennews/art.shtml?num=51186
FFT с помощью блустайна, джва года ждал!
а может NumPy на swift переписать?
> а может NumPy на swift переписать?Нет, ты не "может". Тебе
http://www.opennet.me/openforum/vsluhforumID3/117874.html#36
санитароы всё время мешают.
> а может NumPy на swift переписать?зачем Swift?
Разработку интенсивных алгоритмов вычислительной математики лучше выполнять на С с тем, чтобы добиться 1) скорости, 2) кроссплатформенности. Для прочих языков достаточно иметь интерфейс. На что, собственно, и намекают в новости.Во всяком случае, в нашей практике такой подход оказался успешным.
C может и быстрый и кроссплатформенный, но есть сомнения по поводу математики в C, именно вопросы по поводу приведения типов и вещественных чисел
Что означает в данном контексте "приведение типов"?
> Что означает в данном контексте "приведение типов"?ваня_конвертирует_BigFloat_в_1-битный_флоат.avi
Так в си вам никто не запрещает реализовывать любую математику с любым приведением типов.
Я для себя реализовал работу с длинными числами чтобы реализовать элиптическую крипту и она даже работает.
А какой в этом смысл? Нужно писать математические программы - используйте правильные языки типа Julia. То, что делает numpy у неё в базовой библиотеке. Если нужно машинное обучение - https://github.com/alan-turing-institute/MLJ.jlИ, самое главное, большинство библиотек для Julia написано на Julia, как бы странно для питонистов это ни звучало.
Всё написано на си (кроме того что написано на асме), нужно использовать только си, остальное лишние сущности :)
> нужно использовать только си, остальное лишние сущности :)Любой алгоритм можно выразить в терминах электронов, текущих по проводникам или полупроводникам процессора.... Зачем что-то большее?.....
А если серьёзно, то сущности должны быть ровно те, которые подходят данной предметной области. Любые другие сущности приводят к ошибкам, снижению скорости разработки и отладки. При всей незаменимости С в математике его используют лишь с горя, когда либо разрабы ничего больше не знают, либо надо писать нашлёпку к питону.
И не лезте с другими сущностями в чужой монастырь....
Как минимум затем что математика используется в криптографии, а криптография используется везде, в том числе и там где питон даже не запустится.Если бы не синтаксис питона завязанные на количество пробелов я бы им скорее всего активно пользовался :)
Вот и выросло поколение, которое про фортран даже не слышало.
К сожалению слышало.
Насколько помню этот самый numpy его юзает через *BLAS прослойку, из за этого приходится собирать и таскать целый gcc.
Не представляет никакой проблемы совместное использование Фортрана и С.По секрету для обучающихся. Не представляет никакой проблемы математика на С и интерфейс пользлвателя, скажем, на Visual Basic for Application.
Плевать на фортран, мне он мешается только тем что ради него пол часа гцц компеляется.
Питономатики, подскажите пожалуйста как это полечить:
$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 148.7-48.799.99999999999999
Как быстрофикс, я предлагаю переписать кусок программы на С, собрать *.so и вызвать через CDLL. Может есть какие-то биндинги, типа GMP, только живые и покрывающие все арифметические действия? Должен же быть менее костыльный способ...
> Питономатики, подскажите пожалуйста как это полечить:
> $ python3
>>>> 148.7-48.7
> 99.99999999999999
> Как быстрофикс, я предлагаю переписатьПс-сст, пацанчик, возьми немного NumPy, недорого !
>>> numpy.sum([148.7, -48.7])99.999999999999986
>>> gmpy2.sub(148.7, 48.7)
mpfr('99.999999999999986')
>>> gmpy2.add(148.7, -48.7)mpfr('99.999999999999986')
Аноним открывает для себя волшебный мир арифметики с плавающей точкой.
Мне нравится когда числа с плавающей точкой используются в качестве примера ущербности JS. Не то чтобы там костылей не было, их даже сверх, но использовать числа с плавающей точкой как пример ущербности любого ЯП это уровень.
> Питономатики, подскажите пожалуйста как это полечить:
> $ python3
> Python 3.6.8 (default, Jan 14 2019, 11:02:34)
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> 148.7-48.7
> 99.99999999999999Добро пожаловать в увлекательный мир чисел с плавающей точкой. Это нормальное поведение для float/double, в C то же самое, даже в железе так (в смысле, двоичные дроби под капотом, в которые не любые десятичные переводятся точно).
Если хочется работать именно с десятичными дробями вместо двоичных - есть модуль decimal в стандартной библиотеке.
А если просто вывод не нравится - есть функция round или указание ширины вывода (как в C!):In [1]: a = 148.7
In [2]: b = 48.7
In [3]: a - b
Out[3]: 99.99999999999999In [4]: round(a - b, 2)
Out[4]: 100.0In [5]: round(a - b, 3)
Out[5]: 100.0In [6]: '%.2f' % (a - b)
Out[6]: '100.00'
Спасибо! Помогло.Именно для этого случая:
https://docs.python.org/2/library/decimal.html>>> from decimal import *
>>> getcontext().prec = 10
>>> Decimal(148.7) - Decimal(48.7)Decimal('100.000')
Правда, точность пришлось указать пониже.
Только вот на вход в Decimal лучше строку подавать (кавычки добавить), а не float, а то будет двойное преобразование (сначала при разборе скрипта будет преобразование из десятичной записи в питоновский float, который соответствует сишному double, потом из этого float в структуру внутри объекта типа Decimal), потеря точности и боль-отчаяние. См.:In [2]: import decimal
In [3]: decimal.Decimal(7500.42)
Out[3]: Decimal('7500.420000000000072759576141834259033203125')In [4]: decimal.Decimal('7500.42')
Out[4]: Decimal('7500.42')
> Питономатики, подскажите пожалуйста как это полечить:
> $ python3
> Python 3.6.8 (default, Jan 14 2019, 11:02:34)
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> 148.7-48.7
> 99.99999999999999Например прочитать https://docs.python.org/3/tutorial/floatingpoint.html
>>> format(148.7-48.7,'.2f')'100.00'
>>> format(148.7-48.7,'.10f')'100.0000000000'
>>> format(148.7-48.7,'.20f')'99.99999999999998578915'
> Как быстрофикс, я предлагаю переписать кусок программы на С, собрать *.so
Вы не поверите, но:
% cat arith.c && gcc -Wall -Wextra -O2 -std=c99 arith.c && ./a.out
#include <stdio.h>
int main(void) {
double res = 148.7 - 48.7;
printf("\n%f, %.13f, %.14f", res, res, res);
return 0;
}
100.000000, 100.0000000000000, 99.99999999999999
Ну и раз сегодня такой день, то открою страшную тайну:
https://github.com/python/cpython/tree/master/Python
> Python 60.8% C 31.9%
>Мне жаль :(
Python 3.5.2 (default, Feb 23 2018, 06:12:47)
[GCC 5.4.1 20170404 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 147.8-47.8100.00000000000001
и такое бывает)))
Про MACHEPS слышали? Так называют наименьшее число с десятичной точкой, которое способна различить конкретная машина. Рекомендуется вычислить его до любого полезного вычисления и далее использовать для проверки значимости.
В математике 99.(9)==100. Ряд 9/10+9/10^2+9/10^3 сходится к 1. Это известный и неустранимый косяк позиционной системы счисления: некоторые числа имеют больше одного способа записи. В мире вычислений с ограниченной точностью, ситуация усугубляется ограниченной точностью.
Теперь понятно, почему теперь банки кофе продаются не 100 грамм, а 90 за ту же цену. Математика!
>не 100 грамм, а 90 за ту же цену.А вот это уже ZOG, рептилоиды, ротшильды и заговор. Как Вы не понимаете!7
>Математика!
Американцы!
>Это известный и неустранимый
> косяк позиционной системы счисления: некоторые числа имеют больше одного способа записи.Не-е-е, неустранимы дураки в интернетах, ...
...а это _тупо_ разница в точности представления _дробей_ конечными по длинне дробями с другим, не кратным, основанием.
При переводе "точной" десятичной записи в "двоичную" плавучку "в половине случаев"(ТМ) получается бесконечная дробь (а-ля 1.3 = 0.(3)) и...
та-да-а-а!!
...ошибка округления.Вот, блин, развели детсад.
>>Это известный и неустранимый
>> косяк позиционной системы счисления: некоторые числа имеют больше одного способа записи.
> Не-е-е, неустранимы дураки в интернетах, ...Совершенно верно.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (- 148.7 48.7)
100.0
*:-)
А что pocketfft лучше чем fftw?