range (диапазон)
start=0 — Целое число, которое должно явиться началом последовательности.
stop — Целое число, на котором должно завершиться формирование последовательности. Не входит в последовательность.
step=1 — Целое число — шаг, с которым должна формироваться последовательность. При попытке задать нуль, возбуждается ValueError.
type(range(3)) # class 'range'
list(range(5)) # [0, 1, 2, 3, 4]
list(range(1, 5)) # [1, 2, 3, 4]
list(range(0, 10, 3)) # [0, 3, 6, 9]
list(range(0, -5, -1)) # [0, -1, -2, -3, -4]
list(range(0)) # []
list(range(1, 0)) # []
Преимуществом данного типа по сравнению с обычным списком или кортежем, является то, что он занимает всегда одинаковое небольшое количество памяти вне зависимости от того, какой длины диапазон представляет. Это возможно благодаря тому, что в памяти хранятся только параметры, а значения вычисляются по мере необходимости.
Последовательности реализуют интерфейс collections.abc.Sequence ABC , и предоставляют такие возможности как проверка вхождения, поиск по индексу, срезы и отрицательную индексацию.
Диапазоны, содержащие значения превышающие sys.maxsize поддерживаются, однако некоторые методы (например, len()) могут вызывать OverflowError.
Проверка диапазонов на равенство при помощи == и != сравнивает их как последовательности. Это означает, что два диапазона равны, если они представляют одинаковую последовательность значений. Пример: range(0) == range(2, 1, 3) или range(0, 3, 2) == range(0, 4, 2) .
Python 2
- Вместо типа существует функция range() , возвращающая список.
- Существует тип xrange, последователем дела которого является тип range из Python 3.
type(range(3)) # type 'list'
type(xrange(3)) # type 'xrange'
Python: Необязательные параметры функций
В программировании у многих функций и методов есть параметры, которые редко меняются. В таких случаях этим параметрам задают значения по умолчанию, которые можно поменять по необходимости. С помощью этого сокращается количество одинакового кода. Рассмотрим, как это выглядит на практике.
# Функция возведения в степень # Второй параметр имеет значение по умолчанию два def pow(x, base=2): return x ** base # Три во второй степени (двойка задана по умолчанию) pow(3) # 3 * 3 = 9 # Три в третьей степени pow(3, 3) # 3 * 3 * 3 = 27
Значение по умолчанию выглядит как обычное присваивание в определении. Оно срабатывает только в том случае, если параметр не передали.
Представьте, что вы не привезли с собой в автосервис запчасти для вашего автомобиля. Тогда автомеханик предложит вам поставить те, которые есть у него — по умолчанию.
Значение по умолчанию может быть даже в том случае, когда параметр один:
def my_print(text='nothing'): print(text) my_print() # => "nothing" my_print("Hexlet") # => "Hexlet"
Параметров со значениями по умолчанию может быть любое количество:
def f(a=5, b=10, c=100):
У значений по умолчанию есть одно ограничение. Они должны идти в самом конце списка параметров. С точки зрения синтаксиса, невозможно создать функцию, у которой после необязательного параметра идет обязательный:
# Такой код завершится с ошибкой def f(a=5, b=10, c=100, x): # И такой def f(a=5, b=10, x, c=100): # Этот код сработает def f(x, a=5, b=10, c=100): # Этот тоже сработает def f(x, y, a=5, b=10, c=100):
Теперь вы умеете работать со значениями параметров по умолчанию. Они могут быть как у нескольких параметров, так и у одного. И помните, что значения по умолчанию должны быть в самом конце списка параметров. Эти знания помогут сократить количество одинакового кода.
Задание
Реализуйте функцию get_hidden_card() , который принимает на вход номер кредитки (состоящий из 16 цифр) в виде строки и возвращает его скрытую версию, которая может использоваться на сайте для отображения. Если исходная карта имела номер 2034399002125581, то скрытая версия выглядит так ****5581. Другими словами, функция заменяет первые 12 символов, на звездочки. Количество звездочек регулируется вторым, необязательным, параметром. Значение по умолчанию — 4.
# Кредитка передается внутрь как строка # Второй параметр не передается, значит звездочек будет 4 get_hidden_card('1234567812345678') # ****5678 get_hidden_card('1234567812345678', 2) # **5678 get_hidden_card('1234567812345678', 3) # ***5678 # Или используя переменные card_number = '2034399002121100' get_hidden_card(card_number) # ****1100 get_hidden_card(card_number, 1) # *1100
Для выполнения задания вам понадобится механизм повторения строк, который повторяет строку указанное количество раз. Для этого достаточно умножить строку на число повторений:
'+' * 5 # +++++ 'o' * 3 # ooo
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Определения
- Параметр по умолчанию — необязательный параметр функции
Все равны, как на подбор
Напишите функцию same_by(characteristic, objects), которая проверяет, все ли объекты имеют одинаковое значение некоторой характеристики, и возвращает True, если это так. Если значение характеристики для разных объектов отличается – то False. Для пустого набора объектов, функция должна возвращать True. Аргумент characteristic – это функция, которая принимает объект и вычисляет его характеристику.
Пример 1
=================
Ввод
values = [0, 2, 10, 6]
if same_by(lambda x: x % 2, values):
print(‘same’)
else:
print(‘different’)
———————-
Вывод: same
====================
Пример 2
Ввод
values = [1, 2, 3, 4]
if same_by(lambda x: x % 2, values):
print(‘same’)
else:
print(‘different’)
——————————
Вывод: different
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Заполнить матрицу следующим образом: элементы побочной диагонали равны 0, все остальные элементы равны 1
Заполнить целочисленную матрицу А размером 10Х10, так чтобы каждый элемент на побочной диагонали.
всё ребра параллелепипеда равны ‘a’. Плоские углы одного трёхгранного угла равны 45 градусов, 60 и 90 градусов
всё ребра параллелепипеда равны ‘a’. Плоские углы одного трёхгранного угла равны 45 градусов, 60 и.

Заполнить массив следующим образом: все элементы одной строки равны между собой и равны квадрату номера строки
Опишите: Константы MAX_COL=100 и MAX_ROW=100 тип массив TRow как массив целых чисел из MAX_COL.

Как подсчитывается количество строк и столбцов, все элементы которых оказались равны 0
Как подсчитывается количество строк и столбцов, все элементы которых оказались равны 0
Линейная регрессия. Разбор математики и реализации на python
Тема линейной регресии рассмотрена множество раз в различных источниках, но, как говорится, «нет такой избитой темы, которую нельзя ударить еще раз». В данной статье рассмотрим указанную тему, используя как математические выкладки, так и код python, пытаясь соблюсти баланс на грани простоты и должном уровне для понимания математических основ.
Линейная регрессия представляется из себя регриссионную модель зависимости одной (объясняемой, зависимой) переменной от другой или нескольких других переменных (фактров, регрессоров, независимых переменных) с линейной функцией зависимости. Рассмотрим модель линейной регрессии, при которой зависимая переменная зависит лишь от одного фактора, тогда функция, описывающуя зависимость y от x будет иметь следующий вид:
и задача сводится к нахождению весовых коэффициентов w0 и w1, таких что такая прямая максимально «хорошо» будет описывать исходные данные. Для этого зададим функцию ошибки, минимизация которой обеспечит подбор весов w0 и w1, используя метод наименьших квадратов:
или подставив уравнение модели
Минимизируем функцию ошибки MSE найдя частные производные по w0 и w1
И приравняв их к нулю получим систему уравнений, решение которой обеспечит минимизацию функции потерь MSE.
Раскроем сумму и с учетом того, что -2/n не может равняться нулю, приравняем к нулю вторые множители
Выразим w0 из первого уравнения
Подставив во второе уравнение решим относительно w1
И выразив w1 последнего уравнения получим
Задача решена, однако представленный способ слабо распространим на большое количество фичей, уже при появлении второго признака вывод становится достаточно громоздким, не говоря уже о большем количестве признаков.
Справиться с этой задачей нам поможет матричный способ представления функции потерь и ее минимизация путем дифференцирования и нахождения экстремума в матричном виде.
Предположим, что дана следующая таблица с данными
Для вычисления интерсепта (коэффициента w0) необходимо к таблице добавить столбец слева с фактором f0 все значения которого равны 1 (единичный вектор-столбец). И тогда столбцы f0-f3 (по количеству столбцов не ограничены, можно считать fn) можно выделить в матрицу X, целевую переменную в матрицу-столбец y, а искомые коэффициенты можно представить в виде вектора w.
Тогда функцию потерь
можно представить в следующем виде
Представим в виде скалярного произведения < >и вычислим производную используя дифференциал
приведем формулу к следующему виду
Поскольку дифференциал разницы равен разнице дифференциалов, дифференциал константы (y) равен нулю и константу (в данном случае матрицу X) можно вынести за знак дифференциала, получим
Используя свойство скалярного произведения перенесем матрицу X справа налево незабыв транспонировать ее
Собственно, то что слева и есть дифференциал, найдем экстремум приравняв его к нулю и решив по параметрам w
раскроем скобки и перенесем значения без w вправо
Домножим слева обе стороны равенства на обратную матрицу произведения транспонированной матрицы X на X для выражения вектора w, тогда получим
Аналитическое решение получено, переходим к реализации на python.
#импорт необходимых библиотек import numpy as np from sklearn.linear_model import LinearRegression #зададим начальные условия f0 = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) f1 = np.array([1.1, 2.1, 3.1, 4.4, 5.2, 6.4, 7.1, 8.2, 9.4, 10.5]) f2 = np.array([1.4, 2.3, 3.4, 4.1, 5.5, 6.2, 7.3, 8.4, 9.2, 10.1]) f3 = np.array([1.2, 2.2, 3.4, 4.2, 5.3, 6.2, 7.3, 8.4, 9.2, 10.3]) y = np.array([[1.2], [2.2], [3.3], [4.3], [5.2], [6.3], [7.2], [8.3], [9.3], [10.2]]) w = np.array([np.nan, np.nan, np.nan, np.nan]) X = np.array([f0, f1, f2, f3]).T #рассчитаем коэффициенты используя выведенную формулу coef_matrix = np.dot(np.dot(np.linalg.inv(np.dot(X.T, X)), X.T), y) print(f'Коэффициенты рассчитанные по формуле ') #Коэффициенты рассчитанные по формуле [0.05994939 0.42839296 0.09249473 0.46642055] #проверим расчет используя библиотеку sklearn model = LinearRegression().fit(X, y) coef_sklearn = model.coef_.T coef_sklearn[0] = model.intercept_ print(f'Коэффициенты рассчитанные с использованием библиотеки sklearn ') #Коэффициенты полученные с рассчитанные библиотеки sklearn [0.05994939 0.42839296 0.09249473 0.46642055]
Надеюсь эта статья помогла заглянуть под капот одного из базовых методов машинного обучения — линейной регрессии и станет первой ступенью в этот увлекательный мир: математика машинного обучения.
- линейная регрессия
- математика
- python
- Математика
- Машинное обучение