Друкарня від WE.UA

Всіх вітаю! У сьогоднішній статті ми поговоримо про те, як реалізувати добуток Кронекера у Python завдяки бібліотеці numpy. У рамках цієї статті ми розглянемо як використовувати функцію kron() та у чому суть добутку Кронекера.

Теорія та підготовка

Що таке добуток Кронекера?

Добуток Кронекера — це такий добуток, у ході якого множенням кожного елемента першої матриці на всю другу матрицю ми отримуємо нову ще більшу матрицю. Невід’ємною особливістю добутку Кронекера також є й той факт, що його можна обчислювати для абсолютно будь-яких за розміром двох матриць

Наприклад, ми маємо такі дві матриці:

Наші матриці

Ось приклад обчислення добутку Кронекера звичайним математичним записом:

Алгоритм вирішення

Всі приклади з іншими матрицями обчислюються абсолютно таким самим чином. У нас завжди будуть матриці A та B, але різних розмірів. Тобто, якщо матриця A буде розміром 2×2, то кожен з чотирьох її елементів буде множитися на всю матрицю B.

Встановлення numpy

Windows:

pip install numpy

MacOS:

pip3 install numpy

Linux:

pip install numpy

Реалізація у коді через функцію kron()

Для матриць 3×3

Спочатку імпортуємо бібліотеку numpy:

import numpy as np

Створюємо дві матриці a та b:

a = np.array(
[
    [1, 5, 8],
    [9, 8, 4],
    [0, 2, 6]
]
)

b = np.array(
[
    [2, 2, 2],
    [3, 4, 1],
    [10, 5, 7]
]
)

У numpy добуток Кронекера реалізовується за допомогою функції kron(), якій ми передаємо у якості параметрів дві матриці будь-яких розмірів.

Тепер просто обчислюємо добуток Кронекера для наших матриць:

kronecker_product = np.kron(a, b)
print(f"Result:\n"
      f"{kronecker_product}")

Ось повний код нашої програми:

import numpy as np

a = np.array(
[
    [1, 5, 8],
    [9, 8, 4],
    [0, 2, 6]
]
)

b = np.array(
[
    [2, 2, 2],
    [3, 4, 1],
    [10, 5, 7]
]
)

kronecker_product = np.kron(a, b)
print(f"Result:\n"
      f"{kronecker_product}")

А ось отриманий результат:

Result:
[[ 2  2  2 10 10 10 16 16 16]
 [ 3  4  1 15 20  5 24 32  8]
 [10  5  7 50 25 35 80 40 56]
 [18 18 18 16 16 16  8  8  8]
 [27 36  9 24 32  8 12 16  4]
 [90 45 63 80 40 56 40 20 28]
 [ 0  0  0  4  4  4 12 12 12]
 [ 0  0  0  6  8  2 18 24  6]
 [ 0  0  0 20 10 14 60 30 42]]

Ось ще один приклад:

import numpy as np

a = np.array(
[
    [6, -10, 22],
    [0, -35, 20],
    [11, 47, 51]
]
)

b = np.array(
[
    [-9, 0, 77],
    [32, 41, -84],
    [-10, 12, 62]
]
)

kronecker_product = np.kron(a, b)
print(f"Result:\n"
      f"{kronecker_product}")
Result:
[[  -54     0   462    90     0  -770  -198     0  1694]
 [  192   246  -504  -320  -410   840   704   902 -1848]
 [  -60    72   372   100  -120  -620  -220   264  1364]
 [    0     0     0   315     0 -2695  -180     0  1540]
 [    0     0     0 -1120 -1435  2940   640   820 -1680]
 [    0     0     0   350  -420 -2170  -200   240  1240]
 [  -99     0   847  -423     0  3619  -459     0  3927]
 [  352   451  -924  1504  1927 -3948  1632  2091 -4284]
 [ -110   132   682  -470   564  2914  -510   612  3162]]

Для матриць різних розмірів

Як вже було сказано на початку, добуток Кронекера можна обчислювати для матриць різних розмірів. Ось приклад, де ми маємо різні за розміром матриці, але все одно можемо обчислити добуток Кронекера:

import numpy as np


a = np.array(
[
    [12, 0],
    [8, 7],
    [-2, -4],
    [1, 9]
]
)

b = np.array(
[
    [1, 5, 0, 10],
    [12, 3, 2, 7],
    [5, 8, 4, 3]
]
)

kronecker_product = np.kron(a, b)
print(f"Result:\n"
      f"{kronecker_product}")
Result:
[[ 12  60   0 120   0   0   0   0]
 [144  36  24  84   0   0   0   0]
 [ 60  96  48  36   0   0   0   0]
 [  8  40   0  80   7  35   0  70]
 [ 96  24  16  56  84  21  14  49]
 [ 40  64  32  24  35  56  28  21]
 [ -2 -10   0 -20  -4 -20   0 -40]
 [-24  -6  -4 -14 -48 -12  -8 -28]
 [-10 -16  -8  -6 -20 -32 -16 -12]
 [  1   5   0  10   9  45   0  90]
 [ 12   3   2   7 108  27  18  63]
 [  5   8   4   3  45  72  36  27]]

Також ще один приклад:

import numpy as np


a = np.array(
[
    [45],
    [23],
    [81]
]
)

b = np.array(
[
    [53, -12],
    [91, -34]
]
)

kronecker_product = np.kron(a, b)
print(f"Result:\n"
      f"{kronecker_product}")
Result:
[[ 2385  -540]
 [ 4095 -1530]
 [ 1219  -276]
 [ 2093  -782]
 [ 4293  -972]
 [ 7371 -2754]]

Висновок

У цій статті ми доволі просто й зрозуміло навчилися обчислювати добуток Кронекера у Python, користуючись бібліотекою numpy. Також важливим є й те, що ми розглянули й теоретичні задасади даного математичного прийому, що дало нам більше розуміння.

Статті про вітчизняний бізнес та цікавих людей:

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

    Теми цього довгочиту:

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

    Теми цього довгочиту:

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

    Теми цього довгочиту:

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

    Теми цього довгочиту:

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

    Теми цього довгочиту:

    Читання
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader

Нічний читач

408Прочитань
21Автори
11Читачі
Підтримати
На Друкарні з 14 липня

Більше від автора

  • Перетворення формул у Python на LaTeX формат

    Всіх вітаю! У цій статті ми розглянемо можливість перетворення формул у Python на LaTeX формат за допомогою бібліотеки latexify-py. Також ми перейдемо до середовищ розробки Google Colab та Jupyter Notebook для повноціннох роботи з цією бібліотекою.

    Теми цього довгочиту:

    Програмування
  • Гарне форматування з pprint

    Всіх вітаю! Сьогодні ми поговоримо про те, як зробити вивід програми гарним та зручним завдяки бібліотеці pprint у Python. Крім цього ми розберемо кожний параметр функції pprint() та подивомося на нього у дії.

    Теми цього довгочиту:

    Програмування
  • Скалярний, векторний та мішаний добутки у Python

    Всіх вітаю! Предметом обговорення у сьогоднішній статті будуть скалярний, векторний та мішаний добутки у Python за допомогою бібліотеки numpy. У цій статті ми розглянемо як реалізувати усі ці добуки через відповідний функціонал та дещо дізнаємося про їх суть.

    Теми цього довгочиту:

    Програмування

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: