Домашние задания: Математика
Во сколько раз Java быстрее Питона в математических вычислениях ?
Я , думаю, раз на 5000
А вот тут многое зависит от деталей. Сначала по лирике, потом — по физике. Что такое математические вычисления — уже вопрос, потому что вычислительная сложность численной оптимизации, графовых переборов, монте-карло симуляций и матричных разложений варьируется в зависимости от конкретной реализации конкретного алгоритма, версий языка и пакетов, которые он подгружает, а также банально мощности железа. Также было бы справедливо добавлять к времени выполнения кода также время его написания и отладки, но это уже философский, а не технический вопрос.
В качестве «референтной» математической операции я предлагаю выбрать умножение больших матриц. Это разумно, потому что
Начнём вот с этой статейки на medium:
https://medium.com/swlh/a-performance-comparison-between-c-java-and-python-df3890545f6d
Автор по определению (через вложенный цикл) перемножает пару матриц размера 2048x2048 на Python, C и Java и получает результаты с прикрепленной картинки. Вывод: «ванильный» Python перемножает матрицы по определению в 33 раза медленнее, чем Java, и в 56 раз медленнее C.
Все — вопрос решён? А вот как бы не так: питоном пользуется очень много людей как в науке, так и в индустрии, особенно для математического моделирования и машинного обучения (уж где-где, а тут все держится на матричном умножении), так что в питоне есть библиотеки, оптимизирующие математические вычисления (NumPy и SciPy, например, которые фактически исполняют код на C, так что ускорение будет существенное). Можно даже постараться разобраться в соответствующих декораторах, но спортивное ускорение питона выходит за рамки вопроса.
Для иллюстрации посмотрим на эту статью:
https://martin-thoma.com/matrix-multiplication-python-java-cpp/
Автор перемножает матрицы 2000x2000 на Python, Java и C++ как по определению, так и с помощью библиотек. И выводы делает такие
Моральный вывод: если использовать блага цивилизации в виде NumPy, SciPy, Torch и прочего, то Python перестаёт уступать по скорости другим языкам (а вот про удобство и простоту я говорить не стану — здесь точно найдутся питонохейтеры, так что злить их не буду)
В качестве «референтной» математической операции я предлагаю выбрать умножение больших матриц. Это разумно, потому что
- алгоритмы умножения матриц не очень отличаются асимптотической сложностью (то есть не особо-то и важно, какой именно из них выбран: умножение по определению за O(n^3) или Штрассен за O(n^2.8))
- к матричному умножению сводится очень много других математических операций и вычислений, так что это в каком-то смысле «сердце» численных методов
- уже на такой простой задаче очень виден смысл происходящего и суть моего мнения по вопросу
Начнём вот с этой статейки на medium:
https://medium.com/swlh/a-performance-comparison-between-c-java-and-python-df3890545f6d
Автор по определению (через вложенный цикл) перемножает пару матриц размера 2048x2048 на Python, C и Java и получает результаты с прикрепленной картинки. Вывод: «ванильный» Python перемножает матрицы по определению в 33 раза медленнее, чем Java, и в 56 раз медленнее C.
Все — вопрос решён? А вот как бы не так: питоном пользуется очень много людей как в науке, так и в индустрии, особенно для математического моделирования и машинного обучения (уж где-где, а тут все держится на матричном умножении), так что в питоне есть библиотеки, оптимизирующие математические вычисления (NumPy и SciPy, например, которые фактически исполняют код на C, так что ускорение будет существенное). Можно даже постараться разобраться в соответствующих декораторах, но спортивное ускорение питона выходит за рамки вопроса.
Для иллюстрации посмотрим на эту статью:
https://martin-thoma.com/matrix-multiplication-python-java-cpp/
Автор перемножает матрицы 2000x2000 на Python, Java и C++ как по определению, так и с помощью библиотек. И выводы делает такие
- Ванильный Python — 56 минут, с библиотекой NumPy — 1 минута и 38 секунд
- Ванильная Java — 27 минут, с библиотекой JAMA — 1 минута и 36 секунд
- Ванильный C++ — 1 минута и 40 секунд
Моральный вывод: если использовать блага цивилизации в виде NumPy, SciPy, Torch и прочего, то Python перестаёт уступать по скорости другим языкам (а вот про удобство и простоту я говорить не стану — здесь точно найдутся питонохейтеры, так что злить их не буду)

а тебе зачем сейчас это знать и пользоваться
(твои программы сейчас не требуют большой скорости) ?
(твои программы сейчас не требуют большой скорости) ?
ну хз, у меня питон вообще скорострел
Таня Байбарза
Это assembly и C/C++
Похожие вопросы
- Найти плотность распределения случайной величины и математическое ожидание непрерывной случайной величины
- Помогите с решением задачи по вычислению вероятности события:
- Здравствуйте! Какой математический метод подойдет для решения задачи с тремя неизвестными. Описание внутри вопроса.
- МАТЕМАТИЧЕСКАЯ ЗАДАЧА на английском языке
- Метод математической индукции
- Прошу ответить доступным, 'школьным', не взросло-математическим языком :
- Помогите, пожалуйста, с математической логикой.
- Математическая задачка для сверхразумов (сложная)
- (85 7/30-83 5/18)÷2 2/3÷1/25! БЫСТРЕЕ ПОЖАЛУЙСТА
- 10 голодных Оликов весом 1,2,...10 кг хотят побыстрее добраться до шоколадных гор.
Ясно, что с ростом размера матрицы разрыв может быть уже не в тысячи раз, а в десятки, но сути это не изменит