NumPy: concatenate
Функция numpy.concatenate() используется для объединения массивов вдоль существующих осей. Это позволяет объединять несколько массивов NumPy в один массив. Мы передаем последовательность массивов, которые хотим объединить, в функцию concatenate() вместе с осью. Если ось не передана явно, она принимается за 0.
#theory // Just Python
Функция numpy.concatenate() используется для объединения массивов вдоль существующих осей. Это позволяет объединять несколько массивов NumPy в один массив. Мы передаем последовательность массивов, которые хотим объединить, в функцию concatenate() вместе с осью. Если ось не передана явно, она принимается за 0.
#theory // Just Python
Как округлить число до нужного знака после запятой?
Новички часто пытаются округлять числа вручную или с помощью форматирования строк. Однако в Python есть встроенная функция
Функция round(число, знаки) округляет число до указанного количества знаков после запятой. Если не указывать второй аргумент — округлит до целого. Удобно для вывода результатов вычислений, цен или процентов.
Итог:
round(x, n) — округление числа x до n знаков после запятой.
Без второго аргумента округляет до целого.
Полезно при работе с деньгами, метриками и графиками.
#theory // Just Python
Новички часто пытаются округлять числа вручную или с помощью форматирования строк. Однако в Python есть встроенная функция
round(),
которая делает это просто и понятно.Функция round(число, знаки) округляет число до указанного количества знаков после запятой. Если не указывать второй аргумент — округлит до целого. Удобно для вывода результатов вычислений, цен или процентов.
Итог:
round(x, n) — округление числа x до n знаков после запятой.
Без второго аргумента округляет до целого.
Полезно при работе с деньгами, метриками и графиками.
#theory // Just Python
str.zfill
#theory // Just Python
str.zfill
дополняет строку нулями слева до заданной длины. Это полезно для форматирования чисел с фиксированной шириной, например, в номерах счетов или индексах.#theory // Just Python
NumPy
NumPy — это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых (и очень быстрых) математических функций для операций с этими массивами.
Основным объектом NumPy является однородный многомерный массив (в numpy называется numpy.ndarray). Это многомерный массив элементов (обычно чисел), одного типа.
#theory // Just Python
NumPy — это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых (и очень быстрых) математических функций для операций с этими массивами.
Основным объектом NumPy является однородный многомерный массив (в numpy называется numpy.ndarray). Это многомерный массив элементов (обычно чисел), одного типа.
#theory // Just Python
NumPy, часть 2: базовые операции над массивами
Математические операции над массивами выполняются поэлементно. Создается новый массив, который заполняется результатами действия оператора.
Для этого, естественно, массивы должны быть одинаковых размеров.
#theory // Just Python
Математические операции над массивами выполняются поэлементно. Создается новый массив, который заполняется результатами действия оператора.
Для этого, естественно, массивы должны быть одинаковых размеров.
#theory // Just Python
NumPy, часть 3: random
Есть несколько способов работы с случайными элементами в NumPy.
Путь первый это создавать списки, используя встроенный модуль random, а затем преобразовывать их в numpy.array.
Второй путь это создание массивов. Самый простой способ задать массив со случайными элементами - использовать функцию sample (или random, или random_sample, или ranf - это всё одна и та же функция).
#theory // Just Python
Есть несколько способов работы с случайными элементами в NumPy.
Путь первый это создавать списки, используя встроенный модуль random, а затем преобразовывать их в numpy.array.
Второй путь это создание массивов. Самый простой способ задать массив со случайными элементами - использовать функцию sample (или random, или random_sample, или ranf - это всё одна и та же функция).
#theory // Just Python
NumPy, часть 4: linalg
Теперь же мы приступим к более серьёзным вещам, которые есть в NumPy. Первый на очереди у нас модуль numpy.linalg, позволяющий делать многие операции из линейной алгебры.
Массивы большей размерности в большинстве функций linalg интерпретируются как набор из нескольких массивов нужной размерности. Таким образом, можно одним вызовом функции проделывать операции над несколькими объектами.
#theory // Just Python
Теперь же мы приступим к более серьёзным вещам, которые есть в NumPy. Первый на очереди у нас модуль numpy.linalg, позволяющий делать многие операции из линейной алгебры.
Массивы большей размерности в большинстве функций linalg интерпретируются как набор из нескольких массивов нужной размерности. Таким образом, можно одним вызовом функции проделывать операции над несколькими объектами.
#theory // Just Python
Forwarded from The Экономист
⚡️ Разыгрываем сразу 3 новеньких iPhone 16!
Отличный вариант получить свежайшие гаджеты просто за то, что читаете нас! Для участия нужно:
1. Быть подписанным на The Экономист, Москоубизнес и Доллар по тридцать.
2. Нажать «Участвую!» под этим постом.
Итоги подведём 25 апреля в 18:00 случайным образом при помощи бота. Девайсы за свой счёт застрахуем и отправим победителям в любую точку мира. Всем удачи!
Отличный вариант получить свежайшие гаджеты просто за то, что читаете нас! Для участия нужно:
1. Быть подписанным на The Экономист, Москоубизнес и Доллар по тридцать.
2. Нажать «Участвую!» под этим постом.
Итоги подведём 25 апреля в 18:00 случайным образом при помощи бота. Девайсы за свой счёт застрахуем и отправим победителям в любую точку мира. Всем удачи!
Ловушка с аргументами
В Python
Всегда передавайте
#theory // Just Python
*args
и **kwargs
без передачи дальшеВ Python
*args
и **kwargs
часто используются для гибкости, но ошибка — принимать их и не передавать дальше в базовые классы или функции. Это «глотает» параметры и может ломать поведение программы.Всегда передавайте
*args
и **kwargs
, если не уверены, что они вам не нужны.#theory // Just Python
Bottle — это мини-фреймворк для Python, позволяющий писать веб-приложения с высокой скоростью, и он представлен в виде одного файла bottle.py, так что для его работы достаточно только этого файла.
Мы все обожаем примеры, поэтому вот код для начала работы с Bottle:
Здесь мы создали веб сервер по адресу localhost с портом 8080.
Вы можете изменить текст "Hello {{name}}" на любой другой текст.
Чтобы проверить его работу, просто перейдите по ссылке http://localhost:8080/hello/world. После этого вы увидите на экране "Hello World".
Повторюсь, Bottle распространяется в виде одного файла-модуля и не имеет никаких зависимостей, кроме стандартной библиотеки Python.
Официальная документация только на английском
Русская документация
#theory // Just Python
Мы все обожаем примеры, поэтому вот код для начала работы с Bottle:
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
Здесь мы создали веб сервер по адресу localhost с портом 8080.
Вы можете изменить текст "Hello {{name}}" на любой другой текст.
Чтобы проверить его работу, просто перейдите по ссылке http://localhost:8080/hello/world. После этого вы увидите на экране "Hello World".
Повторюсь, Bottle распространяется в виде одного файла-модуля и не имеет никаких зависимостей, кроме стандартной библиотеки Python.
Официальная документация только на английском
Русская документация
#theory // Just Python
ElasticNet
Минус Lasso в том, что если признаки сильно скоррелированы между собой, она может случайно “выбрать” только один из них и проигнорировать остальные, даже если они тоже информативны. В таких случаях часто используют ElasticNet — это гибрид L1 и L2.
Параметр l1_ratio регулирует баланс между L1 и L2. 0.0 — чистый Ridge. 1.0 — чистый Lasso. 0.5 — пополам.
#theory // Just Python
Минус Lasso в том, что если признаки сильно скоррелированы между собой, она может случайно “выбрать” только один из них и проигнорировать остальные, даже если они тоже информативны. В таких случаях часто используют ElasticNet — это гибрид L1 и L2.
Параметр l1_ratio регулирует баланс между L1 и L2. 0.0 — чистый Ridge. 1.0 — чистый Lasso. 0.5 — пополам.
#theory // Just Python
itertools.starmap
#theory // Just Python
itertools.starmap
применяет функцию к элементам итерируемого объекта, распаковывая аргументы из кортежей. Это полезно для операций с несколькими аргументами без лямбд и циклов.#theory // Just Python
importlib.util.find_spec
#theory // Just Python
importlib.util.find_spec
позволяет узнать, можно ли импортировать модуль, не загружая его. Это полезно для проверки наличия зависимостей, динамической загрузки и построения систем плагинов.#theory // Just Python
Как присвоить несколько переменных в одну строку?
Иногда нужно сразу задать значения нескольким переменным. Новички делают это в несколько строк, что выглядит громоздко. Но Python поддерживает удобную конструкцию множественного присваивания — коротко, читаемо и эффективно!
С помощью этой фичи можно сразу задать значения, поменять переменные местами или распаковать кортеж — всё в одной строке.
Итог:
Множественное присваивание упрощает код.
Позволяет присваивать значения сразу нескольким переменным.
Удобно для обмена значениями и распаковки структур.
#theory // Just Python
Иногда нужно сразу задать значения нескольким переменным. Новички делают это в несколько строк, что выглядит громоздко. Но Python поддерживает удобную конструкцию множественного присваивания — коротко, читаемо и эффективно!
С помощью этой фичи можно сразу задать значения, поменять переменные местами или распаковать кортеж — всё в одной строке.
Итог:
Множественное присваивание упрощает код.
Позволяет присваивать значения сразу нескольким переменным.
Удобно для обмена значениями и распаковки структур.
#theory // Just Python
Дерево решений: Часть 1
Дерево решений — это модель, которая принимает решения, двигаясь по ветвям дерева от корня к листьям. На каждом узле происходит проверка: например, «если возраст > 30 — идём направо, иначе налево». Так шаг за шагом дерево делит данные на подгруппы, пока не придёт к финальному решению: в регрессии — числовое значение, в классификации — метка класса.
Модель выглядит почти как блок-схема, и ты можешь буквально прочитать, почему она приняла то или иное решение. В Python всё это делается через sklearn.tree.DecisionTreeClassifier или DecisionTreeRegressor.
Параметр max_depth — это ограничение на глубину дерева. Без него дерево может продолжать делиться, пока не переобучится подчистую. Всегда важно следить за глубиной, количеством листьев (max_leaf_nodes) и минимальным числом объектов в узле (min_samples_split) — это всё способы контроля переобучения.
#theory // Just Python
Дерево решений — это модель, которая принимает решения, двигаясь по ветвям дерева от корня к листьям. На каждом узле происходит проверка: например, «если возраст > 30 — идём направо, иначе налево». Так шаг за шагом дерево делит данные на подгруппы, пока не придёт к финальному решению: в регрессии — числовое значение, в классификации — метка класса.
Модель выглядит почти как блок-схема, и ты можешь буквально прочитать, почему она приняла то или иное решение. В Python всё это делается через sklearn.tree.DecisionTreeClassifier или DecisionTreeRegressor.
Параметр max_depth — это ограничение на глубину дерева. Без него дерево может продолжать делиться, пока не переобучится подчистую. Всегда важно следить за глубиной, количеством листьев (max_leaf_nodes) и минимальным числом объектов в узле (min_samples_split) — это всё способы контроля переобучения.
#theory // Just Python
Зачем нужны кортежи, если есть списки?
На это есть несколько причин. Во первых, это защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).
Во вторых, кортежи меньше размером чем списки. Это существенный плюс при работе с большими программами.
В третьих, это возможность использовать кортежи в качестве ключей словаря.
#theory // Just Python
На это есть несколько причин. Во первых, это защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).
Во вторых, кортежи меньше размером чем списки. Это существенный плюс при работе с большими программами.
В третьих, это возможность использовать кортежи в качестве ключей словаря.
#theory // Just Python
Как работать с кортежами?
Почему когда мы создаем кортеж из одного элемента нам выводит строку?
Все дело - в запятой. Сами по себе скобки ничего не значат, точнее, значат то, что внутри них находится одна инструкция, которая может быть отделена пробелами, переносом строк и прочим мусором.
Но все же не увлекайтесь, и ставьте скобки, тем более, что бывают случаи, когда скобки необходимы.
Еще можно создать кортеж из итерируемого объекта можно с помощью все той же пресловутой функции tuple()
#theory // Just Python
Почему когда мы создаем кортеж из одного элемента нам выводит строку?
Все дело - в запятой. Сами по себе скобки ничего не значат, точнее, значат то, что внутри них находится одна инструкция, которая может быть отделена пробелами, переносом строк и прочим мусором.
Но все же не увлекайтесь, и ставьте скобки, тем более, что бывают случаи, когда скобки необходимы.
Еще можно создать кортеж из итерируемого объекта можно с помощью все той же пресловутой функции tuple()
#theory // Just Python
The Экономист
⚡️ Разыгрываем сразу 3 новеньких iPhone 16! Отличный вариант получить свежайшие гаджеты просто за то, что читаете нас! Для участия нужно: 1. Быть подписанным на The Экономист, Москоубизнес и Доллар по тридцать. 2. Нажать «Участвую!» под этим постом. …
⚡️Уже через 5 ДНЕЙ мы подведём итоги масштабного розыгрыша среди наших подписчиков — победители получат сразу три новых iPhone 16!
Самое время подписаться на @economica, @mosbusy и @ruble30 и нажать «Учавствую!» под этим постом, если вы ещё этого не сделали. Результаты уже 25 апреля в 18:00!
Самое время подписаться на @economica, @mosbusy и @ruble30 и нажать «Учавствую!» под этим постом, если вы ещё этого не сделали. Результаты уже 25 апреля в 18:00!
Полезная фишка в OpenCV.
Для конвертации из условного BGR в RGB с формой
Нежели решейп через
И это не так явно, потому что кажется, что Numpy и его методы должны быть куда более производительными.
Но это не так, а причина заключается в том, как OpenCV работает с многомерными массивами.
Для него это не
Подробнее можете прочитать здесь.
Так что на будущее — пользуйтесь решейпами и т.д. через OpenCV, а не через методы Numpy.
#theory // Just Python
Для конвертации из условного BGR в RGB с формой
[1, 1, 3]
в разы быстрее работает нативная функция cv2.cvtColor
.Нежели решейп через
numpy.flip
.И это не так явно, потому что кажется, что Numpy и его методы должны быть куда более производительными.
Но это не так, а причина заключается в том, как OpenCV работает с многомерными массивами.
Для него это не
ndarray
, а cv::Mat
.Подробнее можете прочитать здесь.
Так что на будущее — пользуйтесь решейпами и т.д. через OpenCV, а не через методы Numpy.
#theory // Just Python