tak.lol

numpy.dot() - скалярное произведение двух массивов

Давай поговорим о функции numpy.dot(). Эта функция — как швейцарский нож для численных операций в Python. Она может делать множество вещей, но чаще всего используется для умножения массивов. Если ты когда-либо пытался перемножить матрицы вручную, то знаешь, что это не самое простое занятие. Но с numpy.dot() всё становится проще и быстрее, как будто ты перешел от велосипеда к спортивному автомобилю!



Что такое numpy.dot()?


Функция numpy.dot() используется для выполнения скалярного произведения двух массивов. Она может работать как с одномерными, так и с многомерными массивами. В зависимости от входных данных, она может выполнять разные операции:



  • Скалярное произведение векторов.

  • Умножение матриц.

  • Смешанное умножение (например, матрицы и векторы).



Скалярное произведение


Начнем с простого: скалярное произведение двух векторов. Если у тебя есть два вектора, например:



import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = np.dot(a, b)
print(result)  # Вывод: 32

Как это работает? Мы берем соответствующие элементы векторов, умножаем их и складываем. То есть: (1*4) + (2*5) + (3*6) = 32. Легко, правда?



Умножение матриц


Теперь давай перейдем к матрицам. Умножение матриц — это настоящая магия! Допустим, у нас есть две матрицы:



A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])
result_matrix = np.dot(A, B)
print(result_matrix)
#Вывод:
#[[19 22]
#[43 50]]

Как видишь, результатом будет новая матрица, где каждый элемент — это сумма произведений соответствующих строк первой матрицы и столбцов второй. Это как если бы ты пытался сделать идеальный коктейль из двух разных рецептов!



Умножение матриц и векторов


А что если мы захотим умножить матрицу на вектор? Легко! Например:



C = np.array([[1, 2],
              [3, 4]])
v = np.array([5, 6])
result_vector = np.dot(C, v)
print(result_vector)  # Вывод: [17 39]

Здесь мы умножаем матрицу на вектор, и получаем новый вектор. Это как если бы ты решил добавить немного остроты в свой рецепт!



Интересные факты о numpy.dot()



  • Функция numpy.dot() может быть использована для вычисления произведения более чем двух массивов. Просто передай их все в качестве аргументов!

  • Она поддерживает работу с комплексными числами. Так что если ты решишь заняться квантовой физикой, numpy.dot() окажется под рукой!

  • Умножение матриц — это основа многих алгоритмов машинного обучения. Так что ты уже на пути к созданию своего собственного ИИ!



Пример на Python


Давайте рассмотрим пример, где мы умножаем две матрицы и визуализируем входные матрицы и результат.

import numpy as np
import matplotlib.pyplot as plt

# Создаем две матрицы A (2x3) и B (3x2)
A = np.array([[1, 2, 3],
              [4, 5, 6]])

B = np.array([[7, 8],
              [9, 10],
              [11, 12]])

# Выполняем умножение матриц
C = np.dot(A, B)

# Визуализируем матрицы
fig, ax = plt.subplots(1, 3, figsize=(12, 4))

# Визуализация матрицы A
ax[0].imshow(A, cmap='viridis', aspect='auto')
ax[0].set_title('Matrix A (2x3)')
for (i, j), val in np.ndenumerate(A):
    ax[0].text(j, i, val, ha='center', va='center', color='white')

# Визуализация матрицы B
ax[1].imshow(B, cmap='viridis', aspect='auto')
ax[1].set_title('Matrix B (3x2)')
for (i, j), val in np.ndenumerate(B):
    ax[1].text(j, i, val, ha='center', va='center', color='white')

# Визуализация результата C
ax[2].imshow(C, cmap='viridis', aspect='auto')
ax[2].set_title('Result C (2x2)')
for (i, j), val in np.ndenumerate(C):
    ax[2].text(j, i, val, ha='center', va='center', color='white')

plt.tight_layout()
plt.show()


Заключение


Теперь ты знаешь о numpy.dot() больше, чем многие программисты! Эта функция может показаться простой, но она скрывает за собой мощные возможности для работы с данными. Так что используй её на полную катушку и не бойся экспериментировать — ведь программирование должно быть весёлым и увлекательным!



Задания для закрепления материала


Задание 1: Скалярное произведение
Создайте два одномерных массива (вектора) размером 4. Вычислите их скалярное произведение с помощью numpy.dot() и выведите результат.

Задание 2: Умножение матриц
Создайте две матрицы размером 2x3 и 3x2. Выполните их умножение с помощью numpy.dot(). Выведите результат и проверьте, что размер полученной матрицы соответствует правилам умножения матриц.

Задание 3: Умножение матрицы на вектор
Создайте матрицу размером 3x2 и вектор размером 2. Умножьте матрицу на вектор с помощью numpy.dot() и выведите результат. Объясните, что представляет собой полученный вектор.

Задание 4: Произведение нескольких массивов
Создайте три двумерные матрицы (например, 2x2). Используя numpy.dot(), выполните последовательное умножение этих матриц и выведите финальный результат.

Задание 5: Применение в реальной задаче
Представьте, что у вас есть данные о продажах товаров в разных магазинах. Создайте матрицу, где строки представляют магазины, а столбцы — товары (например, 3 магазина и 4 товара). Заполните матрицу случайными числами. Затем создайте вектор, представляющий цену каждого товара. Используйте numpy.dot() для вычисления общей суммы продаж для каждого магазина и выведите результат.
Комментарии к материалу
Комментировать
Ваш комментарий: