CodeLab
145 subscribers
538 photos
20 videos
159 links
Говорим просто о сложном

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
Какой массив создаёт команда np.linspace(1, 10, 4)?
Anonymous Quiz
14%
[1.0, 2.0, 3.0, 4.0]
0%
[1.0, 3.0, 5.0, 10.0]
71%
[1.0, 4.0, 7.0, 10.0]
14%
[1.0, 5.5, 10.0]
❤‍🔥21
❤‍🔥21
ВЕРНУТЬСЯ К НАВИГАЦИИ

🧑‍💻Продолжаем обучаться ML...


0️⃣🔗 В NumPy-массивы можно передавать не только целые числа, но и дробные:

import numpy as np
b = np.array([1.7, 2.3, 5.7])

print(b)
#[1.7 2.3 5.7]


1️⃣ Мы можем указать конкретный тип с помощью дополнительного параметра 🟰dtype🟰:

import numpy as np
c = np.array([1, 2, 3], dtype='float32')

print(c)
# [1. 2. 3.]


Числа int32 занимают 32 бита, или 4 байта, а int16 — 16 бит, или 2 байта. Программисты используют параметр dtype, когда точно знают, что их переменные будут находиться в диапазоне от −32 768 до 32 767.


⁉️ Почему диапазон от −32768 до 32767

В 16-битной системе каждое число хранится в 16 битах, один бит используется для хранения знака числа: 0 — положительное, 1 — отрицательное. Оставшиеся 15 бит используются для представления числового значения —2¹⁵ = 32,768

🔗 Отсюда:

Минимальное значение: -32,768,
Максимальное значение: 32,767


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3
ВЕРНУТЬСЯ К НАВИГАЦИИ

🔗 Разберем код:

0️⃣ Подключим библиотеку и и объяви переменные:

import numpy as np
a = np.int16(32000)
b = np.int16(768)


▫️Переменная a имеет значение 32,000, что близко к верхней границе диапазона int16.

▫️Переменная b имеет значение 768.

1️⃣ Сложение с переполнением:

result = np.int16(a + b)


▫️Математически у нас все выполняется (32000+768=32768), но, но, есть больное но! максимальное значение для int16 — 32,767.

▫️Результат 32,768 превышает этот предел, поэтому происходит переполнение.

▫️Теперь самое главное:

Завтра...

ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👨‍💻1
ВЕРНУТЬСЯ К НАВИГАЦИИ

⚙️ В прошлом посте мы остановились на том, что происходит переполнение...

▫️int16 — это 16-битный целый тип данных

▫️Один бит используется для знака числа (0 — положительное, 1 — отрицательное)

◻️ Из этих двух предложений следует, что диапазон значений: от -32,768 до 32,767 (На вопрос, что это за цифры и почему они такие, я отвечал несколько постов назад)

▫️Дак вот, результат у нас был именно 32,768, что превышает верхнюю границу диапазона (32,767) или выходит за нижнюю границу (-32,768)

Почему так ⁉️

‼️ Число (32,767) в двоичной системе:
0111 1111 1111 1111.


‼️ Если мы прибавим 1, получим 1000000000000000. И как раз наш int16 интерпретирует это как -32,768, так как старший бит стал равен 1


результат не помещается в 16 бит, и его старший бит становится "знаковым", что интерпретируется как отрицательное значение.


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2🤯1
🧑‍💻 Завтра начнем разбирать такую крутую штуку гайс
❤‍🔥2👨‍💻1
ВЕРНУТЬСЯ К НАВИГАЦИИ

Всем доброй ночи, гайс! Надеюсь, вы хорошо проведете свои выходные 😋


🔗 Для того, чтобы изображать любые линейные графики, диаграммы, и даже трехмерную визуализацию, придумали 🟰Matplotlib🟰

⚙️ Импорт библиотеки и все такое мы уже с вам знаем:

from matplotlib import pyplot as plt
# or
import matplotlib.pyplot as plt


🧑‍💻 Сейчас пробежим по основным функциям, а завтра напишем полноценный код:

0️⃣ plot() 


▫️Строит линейный график (line plot)
▫️Принимает массивы значений для осей X и Y

🔗 Пример кода:

import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
plt.plot(x, y, label="График 1", color="blue", linestyle="--")
plt.legend()
plt.show()



1️⃣ scatter()


▫️Строит точечную диаграмму

🔗 Пример кода:

x = [5, 7, 8, 7, 2]
y = [99, 86, 87, 88, 100]
plt.scatter(x, y, color="red", marker="o")
plt.show()


2️⃣ bar()


▫️Создаёт столбчатую диаграмму

🔗 Пример кода:

categories = ['A', 'B', 'C', 'D']
values = [4, 7, 1, 8]
plt.bar(categories, values, color="green")
plt.show()


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1👍1🤯1🤓1
ВЕРНУТЬСЯ К НАВИГАЦИИ

from matplotlib import pyplot as plt

x = [1, 2, 3, 4] # координаты по оси X
y = [10, 20, 25, 30] # координаты по оси Y
plt.plot(x, y, label = 'График 1', color = 'blue', linestyle = '--') # Строит линейный график на основе данных
plt.legend() # Добавляет легенду на график
plt.show() # Показывает график в новом окне


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍1🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

from matplotlib import pyplot as plt
x = [1, 2, 3, 4, 5, 6]
y = [11 ,22, 33, 44, 55, 66]

plt.scatter(x, y, color = 'red', label = 'График 2', marker = 'o') # создаёт точечную диаграмму, цвет точек, форму маркера
plt.legend()
plt.show()


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍1🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

from matplotlib import pyplot as plt
categories = ['A', 'B', 'C', 'D', 'E']
values = [4, 7, 1, 9, 12]
plt.bar(categories, values, label = 'График 3', color = 'green')
plt.legend()
plt.show()


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍1🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

from matplotlib import pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
plt.pie(sizes, labels = labels, autopct = '44%%', startangle = 140)
plt.legend()
plt.show()


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍1🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

from matplotlib import pyplot as plt
data = [1, 2, 2, 3, 3, 3, 4, 4, 5]
plt.hist(data, bins = 5, color = 'blue', alpha = 0.7)
plt.show()


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍1🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

🧑‍💻 Йоу воссап, друзья, потихонечку помаленечку мы продвигаемся. Но нам нельзя никак останавливаться, поэтому предлагаю заняться чем то серьезным, а именно — векторы, матрицы и вся эта сложная штука...

🔗 Итак, начнем конечно же с векторов, базу знать нам необходимо...

▫️Че такое этот ваш вектор? Это объект (математический), который имеет длину (модуль, мера его размера) и направление (ориентация в пространстве)

v = [u₁, u₂ u₃] — вот пример вектора в трехмерном пространстве

Как найти его длину (модуль) ?

|v| = √u²₁, u²₂ u²₃ + ... + u²ₓ

Например:

Если v = [3, 4], то v = 9 + 16 = 5 (я надеюсь, вы поняли че мы сделали, просто в формулу вставьте числа)

Для векторов функция numpy.linalg.norm вычисляет длину (или величину) вектора. По умолчанию она использует Евклидову норму (L2-норма):


import numpy as np
vp = np.array([3, 4])
length = np.linalg.norm(vp)
print(length)
# 5.0


🔗 Касаемо Евклидовой нормы, мы рассмотрим это дальше, пока не надо париться...

ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2🤯1🤓1
ВЕРНУТЬСЯ К НАВИГАЦИИ

🔗 Для начала, что такое норма?

Норма — это способ измерить "размер", "длину" или "величину" объекта. Для векторов норма показывает их длину в пространстве, а Для матриц норма измеряет их размер


В коде я указывал функцию
🟰np.linalg.norm🟰 — из библиотеки NumPy вычисляет норму вектора или матрицы. На фотаче представлены как раз основные нормы, которые мы сейчас и рассмотрим:

1️⃣ Максимальная норма (ord = ∞)

Наибольшее значение суммы абсолютных значений строки.


A = np.array([[1, -2], [3, -4]])
print(np.linalg.norm(A, ord=np.inf))
# Вывод: 7 (максимальная сумма по строкам)


🔗 Кароч, че это значит: есть матрица A = [1 -2] и нижняя строка [3 -4], то для первой строки сумма модуля будет 3, для второй 7 → максимальная сумма (среди модулей) равна 7

Кстати, 🟰np.inf🟰 это представление бесконечности (от infinity)

ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥21
ВЕРНУТЬСЯ К НАВИГАЦИИ

2️⃣ Евклидова норма (по умолчанию, ord = 2)


🔗 Это стандартная длина вектора или "величина" матрицы, мы разбирали еетут

import numpy as np
v = np.array([3, 4])
print(np.linalg.norm(v, ord=2))
# Вывод: 5.0 (гипотенуза треугольника 3-4-5)


▫️Прикол в том, что код будет выводить такой же результат — 5.0

🔗 Что делает ord=2? Кароч, ord=2 говорит функции 🟰np.linalg.norm🟰, что мы хотим найти L2-норму (она по умолчанию стоит. но по-хорошему ее надо указывать для точности).

🔗 |v| = √u²₁, u²₂ u²₃ + ... + u²ₓ — По сути, это стандартная длина вектора в пространстве. Если представить вектор [3,4] как точку в 2D-пространстве, его длина — это расстояние от начала координат (0,0) до точки (3,4

ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤‍🔥1🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

3️⃣ Манхэттенская норма (ord = 1)
(L1-норма)

|x|₁ = |x₁| + |x₂| + ... + |xₙ| — для векторов

🔗 Для матриц:

A = np.array([[1, -2], [3, -4]])
print(np.linalg.norm(A, ord = 1))

# Вывод: 6.0 (максимальная сумма по столбцу)


▫️Кароч, че тут происходит: функция вычисляет сумму абсолютных значений каждого столбца и возвращает максимальную сумму (Первый столбец — [1, 3] → складываем и получаем 4, второй столбец — [−2,−4] → складываем модули и получаем 6Максимальная сумма — 6

ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥21🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

4️⃣ Frobenius-норма (ord='fro', по умолчанию для матриц)


🧑‍💻 Frobenius-норма используется для матриц и вычисляется как корень из суммы квадратов всех элементов матрицы. Она является обобщением Евклидовой нормы для векторов. (Опять же, формулу можете почекать на главной картинке)

⚙️ Итак, поговорим немного о формуле:

A — матрица,

aᵢⱼ — элемент матрицы A в строке i и столбце j
.

▫️Теперь пример:


🔗 Возьмем матрицу с этого примера → матрица A = [1 -2] — верхняя строка и нижняя строка [3 -4] → дальше вычисляем квадраты всех элементов матрицы и складываем → получаем 30 → корень из 30 приблизительно 5.477

▫️Код:

import numpy as np 

a = np.array([[1, -2], [3, -4]])
fnorm = np.linalg.norm(a, ord = 'fro')
print(fnorm)


Если не указывать ord для матрицы, Frobenius-норма используется по умолчанию.


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤‍🔥1🤯1🤓1
Media is too big
VIEW IN TELEGRAM
ВЕРНУТЬСЯ К НАВИГАЦИИ

🧑‍💻1️⃣ Скалярное произведение векторов

Скалярное произведение двух векторов a и b — это сумма произведений их соответствующих компонентов


🔗 a⋅b=∣a∣∣b∣cos(θ)

🔗 ∣a∣ и ∣b∣ — длины векторов, θ — угол между ними


Если угол равен 90°, то скалярное произведение равно 0, так как cos(90°) = 0


Теперь напишем пример на Python:

import numpy as np
a = ([1, 2, 3])
b = ([4, 5, 6])

dot_product = np.dot(a, b)
print(dot_product)


Dot Product — это операция между двумя векторами, которая возвращает одно число (скаляр). Она вычисляется как сумма произведений соответствующих компонент векторов.


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥21🤯1
ВЕРНУТЬСЯ К НАВИГАЦИИ

2️⃣🔗 Что касаемо векторного произведения?

a × b = i ⋅ (a 2​b 3​−a 3​b 2​) − j ⋅ (a 1​b 3​−a 3​b 1​) + k ⋅ (a 1​b 2​−a 2​b 1​)

import numpy as np 

a = ([1, 2, 3])
b = ([4, 5, 6])
cross_product = np.cross(a, b)
print(cross_product)


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥11🥰1
ВЕРНУТЬСЯ К НАВИГАЦИИ

Строим график синусоиды


0️⃣ Импортируем две базовые библиотеки:

import matplotlib.pyplot as plt
import numpy as np


1️⃣ Создание фигуры (с помощью Figure)


fig = plt.figure(figsize=(5, 4))


🔗 Итак, 🟰plt.figure🟰 создаёт новый объект, на которой будут отображаться графики. А что касаемо параметров (5, 4) ? Параметры отвечают за размер фигуры:

первая цифра (5) — это ширина фигуры
вторая цифра (4) — это высота фигуры


Итак, создаётся фигура размером 5x4 дюйма


2️⃣ Добавляем оси

ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])


▫️Этот метод добавляет оси на заданную фигур.

▫️[0.1, 0.1, 0.8, 0.8] — Список, который задаёт положение и размер области для осей внутри фигуры в виде четырёх чисел и вот как это выглядит:

0.1 — отступ от левой границы фигуры.
0.1 — отступ от нижней границы фигуры.
0.8 — ширина осей относительно ширины фигуры.
0.8 — высота осей относительно высоты фигуры.


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2🥰1🤓1
ВЕРНУТЬСЯ К НАВИГАЦИИ

Это для понимания того, как работают параметры в этой строке:


ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])


🔽🔽🔽

fig = plt.figure(figsize=(8, 8))

# График 1: минимальные отступы (основной размер)
ax1 = fig.add_axes([0.0, 0.0, 0.8, 0.8]) # График занимает большую часть фигуры, отступов нет
ax1.set_title('Отступы: [0.0, 0.0, 0.8, 0.8]')

# График 2: отступы увеличены
ax2 = fig.add_axes([0.3, 0.3, 0.5, 0.5]) # График с увеличенными отступами
ax2.set_title('Отступы: [1.3, 1.3, 0.5, 0.5]')

plt.show()


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤‍🔥1👍1🤯1