Drukarnia.BLOG

Всіх вітаю! У сьогоднішній статті ми поговоримо про те, як реалізувати добуток Кронекера у 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. Також важливим є й те, що ми розглянули й теоретичні задасади даного математичного прийому, що дало нам більше розуміння.

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

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Magnifique numérique
Magnifique numérique@magnifiquedigitalworld

Прекрасний цифровий світ

97Довгочити
2.3KПерегляди
28Підписники
Підтримати
На Друкарні з 14 липня 2025

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

  • Книги з Google Play можна експортувати та використовувати у Gemini Notebook

    Нещодавно компанія Google заявила про те, що додала до застосунку Gemini Notebook (колишній NotebookLM) можливість експортувати електронні книги з Google Play.

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

    It
  • Клас Timer у модулі threading в Python

    У цій статті ми розглянемо, поняття потоків і таймерів та їх особливості. Крім того, ми навчимося створювати власні кастомні таймери, які будуть виконувати код саме так, як нам треба.

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

    Програмування
  • Відтепер для застосунків на Base44 можна додавати push-повідомлення

    Нещодавно компанія-розробник платформи Base44, яка дозволяє створювати застосунки за допомогою ШІ, заявила, що відтепер до своїх застосунків можна підключати push-повідомлення.

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

    It Новини

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

  • Альтернатива офісному пакету Office

    ONLYOFFICE — це потужна альтернатива Microsoft Office і Google Docs розробляє та підтримує компанія Ascensio System SIA — ІТ-компанія з головним офісом у Ризі (Латвія). Ця компанія створила ONLYOFFICE як свій основний проєкт і розвиває його як офісний пакет.

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

    Корисні Програми
  • Що означає для Маска можливий зв'язок Х із олігархами з РФ? - DW

    Суд у США змусив власника соцмережі X Ілона Маска розкрити імена інвесторів та акціонерів цієї популярної медіаплатформи. DW - про можливі далекосяжні наслідки цього кроку.

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

    Аналітика
  • Java. Трішки про JVM та graceful shutdown

    У сучасних Java-додатках важливо забезпечити не лише високу продуктивність, але й коректне завершення роботи. Тому розглянемо основні потоки JVM, процес graceful shutdown, використання класу Runtime та механізму shutdown hooks для ефективного завершення роботи програм.

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

    Java

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

Можливо мене не зрозуміють, але воно мені дико нагадує тензорний добуток. Таке ж позначення ⊗. Просто тут може бути особлива умова “згортки” для множення таких “блочних” матриць. Просто моя логіка в тому, що це ніби 4-кратний тензорний, але ж не буде, бо “як тоді це не “просторова” матриця 3×3×3×3 ?”. 2 Варіанти: дужки (V⊗V)⊗(V⊗V), або ми взяли коефіцієнти не дійсні числа, а такі ж матриці. І це вже такий модуль, а не векторний простір. Хоча мета просто в алгоритмах, напевне якісь обчислення простіше.

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

  • Альтернатива офісному пакету Office

    ONLYOFFICE — це потужна альтернатива Microsoft Office і Google Docs розробляє та підтримує компанія Ascensio System SIA — ІТ-компанія з головним офісом у Ризі (Латвія). Ця компанія створила ONLYOFFICE як свій основний проєкт і розвиває його як офісний пакет.

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

    Корисні Програми
  • Що означає для Маска можливий зв'язок Х із олігархами з РФ? - DW

    Суд у США змусив власника соцмережі X Ілона Маска розкрити імена інвесторів та акціонерів цієї популярної медіаплатформи. DW - про можливі далекосяжні наслідки цього кроку.

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

    Аналітика
  • Java. Трішки про JVM та graceful shutdown

    У сучасних Java-додатках важливо забезпечити не лише високу продуктивність, але й коректне завершення роботи. Тому розглянемо основні потоки JVM, процес graceful shutdown, використання класу Runtime та механізму shutdown hooks для ефективного завершення роботи програм.

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

    Java