🐍 Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ систСмами Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ scipy.linalg

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ научимся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ практичСских Π·Π°Π΄Π°Ρ‡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ scipy.linalg ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Python ΠΈ NumPy.

Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ. Автор: Renato Candido. Бсылка Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π».

Π’ Python Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², связанных с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€ΠΎΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² scipy.linalg, которая содСрТит инструмСнты для эффСктивного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡.

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ:

  1. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ практичСских Π·Π°Π΄Π°Ρ‡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ scipy.linalg
  2. Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Python ΠΈ NumPy
  3. ΠœΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ практичСскиС Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… систСм
  4. Π Π΅ΡˆΠ°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ систСмы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ scipy.linalg

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ систСмами, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΈΠ· этой сСрии. А ΠΏΠΎΠΊΠ° Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ дальшС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с scipy.linalg.

БСсплатный исходный ΠΊΠΎΠ΄: Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ здСсь, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ бСсплатный ΠΊΠΎΠ΄ ΠΈ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ систСмами ΠΈ Π°Π»Π³Π΅Π±Ρ€ΠΎΠΉ Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ scipy.linalg.

Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ максимизации ΠΏΡ€ΠΈΠ±Ρ‹Π»ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ особСнности Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования. Π’ качСствС высокоуровнСвых инструмСнтов – Python, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SciPy ΠΈ PuLP.

НачинаСм Ρ€Π°Π±ΠΎΡ‚Ρƒ с scipy.linalg

SciPy β€” это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… вычислСний, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ‰ΠΈΡ… Π·Π°Π΄Π°Ρ‡ Π² Π½Π°ΡƒΠΊΠ΅ ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ линСйная Π°Π»Π³Π΅Π±Ρ€Π°, оптимизация, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, интСрполяция ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сигналов. Π­Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ стСка SciPy, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… вычислСний, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ NumPy, Matplotlib, SymPy, IPython ΠΈ pandas.

ЛинСйная Π°Π»Π³Π΅Π±Ρ€Π° β€” это Ρ€Π°Π·Π΄Π΅Π» ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ занимаСтся Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ уравнСниями ΠΈ ΠΈΡ… прСдставлСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, ΠΈ являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… областях ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ. Π—Π½Π°Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ – Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ условиС для Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания машинного обучСния.

scipy.linalg Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя нСсколько инструмСнтов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для выполнСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Ρ… вычислСний, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ, инвСрсии, собствСнныС значСния, собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ сингулярным значСниям.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· scipy.linalg для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ практичСских Π·Π°Π΄Π°Ρ‡, связанных с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ систСмами. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ SciPy, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дистрибутива Python Anaconda ΠΈ conda, систСмы управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈ срСдой.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± Anaconda ΠΈ conda, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ «Настройка Python для машинного обучСния Π² WindowsΒ» .

Для Π½Π°Ρ‡Π°Π»Π° создайтС срСду conda ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π΅:

$ conda create --name linalg
$ conda activate linalg

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ срСду conda, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС отобразится Π΅Π΅ имя, linalg. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ срСды:

(linalg) $ conda install scipy jupyter

ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ систСмС потрСбуСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ зависимости ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ установку.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Помимо использования SciPy, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Jupyter Notebook для запуска ΠΊΠΎΠ΄Π° Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ срСдС. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с числовыми ΠΈ Π½Π°ΡƒΡ‡Π½Ρ‹ΠΌΠΈ прилоТСниями.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ Π² памяти Ρ€Π°Π±ΠΎΡ‚Ρƒ с Jupyter Notebook, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Jupyter Notebook: An Introduction.

Если Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ дистрибутив Python с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² pip, Ρ€Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΈ посмотритС Ρ€Π°Π·Π΄Π΅Π» Π½ΠΈΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ срСду:

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ срСду, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, Ρ‡Ρ‚ΠΎ Ρƒ вас установлСн Python, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ срСду ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ linalg:

Windows:

PS> python -m venv linalg
PS> .\linalg\Scripts\Activate

Linux:

$ python -m venv linalg
$ source ./linalg/bin/activate

ПослС Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ срСды Π² подсказкС появится Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ – linalg. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ срСды с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip:

(linalg) $ python -m pip install scipy jupyter

БистСмС потрСбуСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с зависимостями ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ установку. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg ΠΈ Jupyter.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Jupyter Notebook, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ linalg-срСду, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Notebooks (Ρ‚. Π΅. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ядра). Для этого Π² Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС linalg Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

(linalg) $ python -m ipykernel install --user --name linalg

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Jupyter Notebook, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ jupyter notebook

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Jupyter загрузится Π² вашСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, создайтС Π½ΠΎΠ²Ρ‹ΠΉ Notebook, Π½Π°ΠΆΠ°Π² Π½Π° New β†’ linalg, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’Π½ΡƒΡ‚Ρ€ΠΈ Notebook Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ установки, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π² ΠΏΠ°ΠΊΠ΅Ρ‚ scipy:

In [1]: import scipy

Если Π²Ρ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ошибки ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Ρ‚ΠΎ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ настройку срСды, Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π² Python, Ρ‡Ρ‚ΠΎ являСтся основой для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с прилоТСниями Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ Π² scipy.linalg.

Π Π°Π±ΠΎΡ‚Π° с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NumPy

Π’Π΅ΠΊΡ‚ΠΎΡ€ β€” это матСматичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для прСдставлСния физичСских Π²Π΅Π»ΠΈΡ‡ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠ°ΠΊ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, Ρ‚Π°ΠΊ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΈ Π·Π°Π΄Π°Ρ‡ машинного обучСния. Π’ΠΎ ΠΆΠ΅ самоС ΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для прСдставлСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, срСди Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

NumPy β€” это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ Π² Python, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС с scipy.linalg для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с прилоТСниями Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с основами Π΅Π³ΠΎ использования для создания ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ выполнСния Π½Π°Π΄ Π½ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Jupyter Notebook, β€” это ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ numpy. Для этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдоним np:

In [1]: import numpy as np

Для прСдставлСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² NumPy ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ndarray.

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ndarray Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.array(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄ массивоподобный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ список ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NumPy, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.array(), создавая Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список, содСрТащий элСмСнты ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:

In [2]: A = np.array([[1, 2], [3, 4], [5, 6]])
   ...: A
Out[2]:
array([[1, 2],
       [3, 4],
       [5, 6]])

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, NumPy обСспСчиваСт Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ столбцы ΠΈ строки.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ элСмСнты массива NumPy Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ массива NumPy, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ .dtype:

In [3]: A.dtype
Out[3]:
dtype('int64')

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС элСмСнты A ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, массив Π±Ρ‹Π» создан с Ρ‚ΠΈΠΏΠΎΠΌ int64. Если ΠΎΠ΄ΠΈΠ½ ΠΈΠ· элСмСнтов являСтся числом с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, Ρ‚ΠΎ массив Π±ΡƒΠ΄Π΅Ρ‚ создан с Ρ‚ΠΈΠΏΠΎΠΌ float64:

In [4]: A = np.array([[1.0, 2], [3, 4], [5, 6]])
   ...: A
Out[4]:
array([[1., 2.],
       [3., 4.],
       [5., 6.]])

In [5]: A.dtype
Out[5]:
dtype('float64')

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ndarray-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .shape. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ A, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ A.shape:

In [6]: A.shape
Out[6]:
(3, 2)

Как ΠΈ оТидалось, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A Ρ€Π°Π²Π½Ρ‹ 3Γ—2, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ A содСрТит Ρ‚Ρ€ΠΈ строки ΠΈ Π΄Π²Π° столбца.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, связанными с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, Π²Π°ΠΌ часто придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ транспонирования, которая мСняСт мСстами столбцы ΠΈ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ndarray-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .transpose()ΠΈΠ»ΠΈ .T. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ транспонированиС A с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ A.T:

In [7]: A.T
Out[7]:
array([[1., 3., 5.],
       [2., 4., 6.]])

ΠŸΡ€ΠΈ транспонировании столбцы A становятся строками A.T, Π° строки становятся столбцами.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ np.array(), создавая список с элСмСнтами Π²Π΅ΠΊΡ‚ΠΎΡ€Π°:

In [8]: v = np.array([1, 2, 3])
   ...: v
Out[8]:
array([1, 2, 3])

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .shape, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅:

In [9]: v.shape
Out[9]:
(3,)

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° этого Π²Π΅ΠΊΡ‚ΠΎΡ€Π° (3,), Π° Π½Π΅ (3, 1) ΠΈΠ»ΠΈ (1, 3). Π­Ρ‚ΠΎ функция NumPy, которая Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°, Ссли Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с MATLAB. Π’ NumPy ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ v, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ. НапримСр, опСрация транспонирования Π½Π΅ влияСт Π½Π° ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ массиву np.array(), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ массив Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ массиву, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список:

In [10]: v = np.array([[1, 2, 3]])
   ...: v.shape
Out[10]:
(1, 3)

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ v Ρ€Π°Π²Π½Ρ‹ 1Γ— 3, Ρ‡Ρ‚ΠΎ соотвСтствуСт Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°-строки. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€-столбСц, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список:

In [11]: v = np.array([[1], [2], [3]])
   ...: v.shape
Out[11]:
(3, 1)

Π’ этом случаС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ v Ρ€Π°Π²Π½Ρ‹ 3Γ— 1, Ρ‡Ρ‚ΠΎ соотвСтствуСт Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°-столбца.

ИспользованиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков для создания Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΌ, особСнно для Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²-столбцов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°Ρ‰Π΅ всСго. Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² плоский список Π² np.array, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .reshape() для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ndarray:

In [12]: v = np.array([1, 2, 3]).reshape(3, 1)
   ...: v.shape
Out[12]:
(3, 1)

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ .reshape() для получСния Π²Π΅ΠΊΡ‚ΠΎΡ€-столбца Π²ΠΈΠ΄Π° (3, 1) ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π²ΠΈΠ΄Π° (3,). Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² случаС использования .reshape() Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ количСство элСмСнтов Π½ΠΎΠ²ΠΎΠ³ΠΎ массива Π±Ρ‹Π»ΠΎ совмСстимо с количСством элСмСнтов исходного массива. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, количСство элСмСнтов Π² Π½ΠΎΠ²ΠΎΠΌ массивС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ количСству элСмСнтов Π² исходном массивС.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .reshape() Π±Π΅Π· явного опрСдСлСния количСства строк массива:

In [13]: v = np.array([1, 2, 3]).reshape(-1, 1)
   ...: v.shape
Out[13]:
(3, 1)

Π—Π΄Π΅ΡΡŒ , -1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² .reshape(),прСдставляСт количСство строк, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΈΠΌΠ΅Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ столбСц, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Π’ этом случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ исходный массив состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов, количСство строк Π² Π½ΠΎΠ²ΠΎΠΌ массивС Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ 3.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π²Π°ΠΌ часто Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠ· Π½ΡƒΠ»Π΅ΠΉ, Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΈΠ»ΠΈ случайных элСмСнтов. Для этого NumPy прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π°Π»Π΅Π΅.

ИспользованиС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для создания массивов

NumPy Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для создания массивов. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ нулями, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.zeros():

In [1]: import numpy as np

In [2]: np.zeros((3, 2))
Out[2]:
array([[0., 0.],
       [0., 0.],
       [0., 0.]])

Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° np.zeros()Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΡƒ массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ‚ΠΈΠΏΠ° float64.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ создаваСмого массива np.zeros(), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для dtype. НапримСр, np.zeros((3, 2), dtype=int) создаСт массив Ρ†Π΅Π»Ρ‹Ρ… чисСл.

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ для создания массивов, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.ones():

In [3]: np.ones((2, 3))
Out[3]:
array([[1., 1., 1.],
       [1., 1., 1.]])

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ np.ones() Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ‚ΠΈΠΏΠ° float64.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массивы со случайными элСмСнтами, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.random.rand():

In [4]: np.random.rand(3, 2)
Out[4]:
array([[0.8206045 , 0.54470809],
       [0.9490381 , 0.05677859],
       [0.71148476, 0.4709059 ]])

np.random.rand() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив случайных чисСл ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1, взятых ΠΈΠ· Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ распрСдСлСния. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ np.zeros() ΠΈ np.ones(), np.random.rand() Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив со случайными элСмСнтами, взятыми ΠΈΠ· Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ распрСдСлСния с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ срСдним Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ диспСрсиСй, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.random.randn():

In [5]: np.random.randn(3, 2)
Out[5]:
array([[-1.20019512, -1.78337814],
       [-0.22135221, -0.38805899],
       [ 0.17620202, -2.05176764]])

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· созданиС массивов, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с Π½ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с массивами NumPy

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Python с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ слоТСния (+), вычитания (-), умноТСния (*), дСлСния ( /) ΠΈ возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ (**) Π½Π°Π΄ массивами всСгда Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ поэлСмСнтно. Если ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² являСтся скаляром, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ скаляром ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом массива.

НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ элСмСнтами, Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 10, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.ones() ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° 10 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° * :

In [1]: import numpy as np

In [2]: 10 * np.ones((2, 2))
Out[2]:
array([[10., 10.],
       [10., 10.]])

Если ΠΎΠ±Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивами ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Ρ‚ΠΎ опСрация Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ элСмСнтами массивов:

In [3]: A = 10 * np.ones((2, 2))
   ...: B = np.array([[2, 2], [5, 5]])
   ...: A * B
Out[3]:
array([[20., 20.],
       [50., 50.]])

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ B.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† (@):

In [4]: A = np.array([[1, 2], [3, 4]])
   ...: v = np.array([[5], [6]])
   ...: A @ v
Out[4]:
array([[17],
       [39]])

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚Π΅ A-ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 2 Γ— 2 Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ 2 Γ— 1 с ΠΈΠΌΠ΅Π½Π΅ΠΌ v.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ np.dot(), хотя вмСсто Π½Π΅Π³ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @:

In [5]: A = np.array([[1, 2], [3, 4]])
   ...: v = np.array([[5], [6]])
   ...: np.dot(A, v)
Out[5]:
array([[17],
       [39]])

Помимо основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, NumPy Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€ΠΎΠΉ Π² numpy.linalg. Однако scipy.linalg ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΅Ρ‰Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ прСимущСствами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим Π΄Π°Π»Π΅Π΅.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ scipy.linalg с numpy.linalg

NumPy Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ numpy.linalg Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ инструмСнты для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с прилоТСниями Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ . Однако, Ссли Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ SciPy Π² качСствС зависимости Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • Как поясняСтся Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, scipy.linalg содСрТит всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² numpy.linalg плюс Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² numpy.linalg.
  • scipy.linalg всСгда компилируСтся с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ BLAS ΠΈ LAPACK, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для выполнСния числовых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ способом. Π’ случаС numpy.linalg использованиС BLAS ΠΈ LAPACK Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ устанавливаСтС NumPy, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ scipy.linalg ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС, Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· numpy.linalg.

Учитывая, Ρ‡Ρ‚ΠΎ Π½Π°ΡƒΡ‡Π½Ρ‹Π΅ ΠΈ тСхничСскиС прилоТСния, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ зависимостСй, рСкомСндуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ SciPy ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg вмСсто numpy.linalg.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнты scipy.linalg для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ систСмами. Π’Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ с изучСния основ Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΊ практичСской Π·Π°Π΄Π°Ρ‡Π΅.

ИспользованиС scipy.linalg.solve()для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… систСм

Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ систСмы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ инструмСнтом для поиска Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΈ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ транспортных срСдств, химичСскими уравнСниями, элСктричСскими цСпями ΠΈ полиномиальной интСрполяциСй.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg.solve()для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… систСм. Но, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ΄ΠΎΠΌ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ основы.

Знакомство с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ систСмами

ЛинСйная систСма ΠΈΠ»ΠΈ, Ρ‚ΠΎΡ‡Π½Π΅Π΅, систСма Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ β€” это Π½Π°Π±ΠΎΡ€ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ относящихся ΠΊ Π½Π°Π±ΠΎΡ€Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ систСмы, относящСйся ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ x ₁, x β‚‚ ΠΈ x ₃:

Π—Π΄Π΅ΡΡŒ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ уравнСния с трСмя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ систСма Π±Ρ‹Π»Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ, значСния K ₁, …, K ₉ ΠΈ b ₁, b β‚‚, b ₃ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ константами.

Когда Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ уравнСния ΠΈ Π΄Π²Π΅ ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ расчСты Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ уравнСния ΠΈ Π½Π°ΠΉΡ‚ΠΈ значСния для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Однако ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ систСмы Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΈ возрастаСт риск ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ошибок.

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ прилоТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ большоС количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… систСм Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π΅ΡΡ‚ΡŒ нСсколько инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эту Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ scipy.linalg.solve().

ИспользованиС scipy.linalg.solve()

SciPy позволяСт scipy.linalg.solve() быстро ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ систСмы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ систСму:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg.solve(), Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ систСму Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ произвСдСния, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ исходныС уравнСния систСмы послС вычислСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ произвСдСния. ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ scipy.linalg.solve() β€” это ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° A ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ b, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массивов NumPy. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ систСму, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

In [1]: import numpy as np
   ...: from scipy import linalg

In [2]: A = np.array(
   ...:    [
   ...:        [3, 2],
   ...:        [2, -1],
   ...:    ]
   ...: )

In [3]: b = np.array([12, 1]).reshape((2, 1))

In [4]: x = linalg.solve(A, b)
   ...: x
Out[4]:
array([[2.],
       [3.]])

Π’ΠΎΡ‚ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит:

  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 1 ΠΈ 2 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ NumPy ΠΊΠ°ΠΊ np, Π° Ρ‚Π°ΠΊΠΆΠ΅ linalg ΠΈΠ· scipy.
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 4 ΠΏΠΎ 9 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ коэффициСнтов Π² Π²ΠΈΠ΄Π΅ массива NumPy ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΅Π΅ A.
  • Π’ строкС 11 создаСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ нСзависимых Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² с использованиСм массива NumPy с ΠΈΠΌΠ΅Π½Π΅ΠΌ b. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€-столбцом с двумя линиями, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ .reshape((2, 1)).
  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 13 ΠΈ 14 ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°ΡŽΡ‚ linalg.solve() для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ систСмы, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠΉ A ΠΈ b, с сохранСниСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ x. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ solve() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, хотя всС элСмСнты исходных массивов ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами.

Если Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ x₁ = 2 ΠΈ xβ‚‚ = 3 Π² исходных уравнСниях, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ систСмы.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ознакомились с основами использования scipy.linalg.solve(), ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… систСм.

РСшСниС практичСской Π·Π°Π΄Π°Ρ‡ΠΈ: составлСниС ΠΏΠ»Π°Π½Π° питания

Одна ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… систСм, β€” это ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для получСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ смСси. НиТС Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту идСю для построСния ΠΏΠ»Π°Π½Π° питания, смСшивая Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄ΠΈΠ΅Ρ‚Ρƒ.

Для этого ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ сбалансированная Π΄ΠΈΠ΅Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • 170 Π΅Π΄ΠΈΠ½ΠΈΡ† Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π° А
  • 180 Π΅Π΄ΠΈΠ½ΠΈΡ† Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π° Π’
  • 140 Π΅Π΄ΠΈΠ½ΠΈΡ† Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π° Π‘
  • 180 Π΅Π΄ΠΈΠ½ΠΈΡ† Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π° D
  • 350 Π΅Π΄ΠΈΠ½ΠΈΡ† Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π° Π•

Π’Π°ΡˆΠ° Π·Π°Π΄Π°Ρ‡Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ количСство ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π²ΠΈΡ‚Π°ΠΌΠΈΠ½ΠΎΠ². Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ прСдставлСны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² пСрСсчСтС Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π°:

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π’ΠΈΡ‚Π°ΠΌΠΈΠ½ A Π’ΠΈΡ‚Π°ΠΌΠΈΠ½ B Π’ΠΈΡ‚Π°ΠΌΠΈΠ½ C Π’ΠΈΡ‚Π°ΠΌΠΈΠ½ D Π’ΠΈΡ‚Π°ΠΌΠΈΠ½ E
#1 1 10 1 2 2
#2 9 1 0 1 1
#3 2 2 5 1 2
#4 1 1 1 2 13
#5 1 1 1 9 2

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ 1 ΠΊΠ°ΠΊ x ₁ ΠΈ Ρ‚. Π΄. ΠΈ учитывая, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ x ₁ Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° 1, x β‚‚ Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° 2 ΠΈ Ρ‚. Π΄., Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для количСства Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π° А, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π² Ρ€Π°Ρ†ΠΈΠΎΠ½Π΅. Учитывая, Ρ‡Ρ‚ΠΎ сбалансированная Π΄ΠΈΠ΅Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ 170 Π΅Π΄ΠΈΠ½ΠΈΡ† Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Π° А, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· столбца Π’ΠΈΡ‚Π°ΠΌΠΈΠ½ А, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅:

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΡ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ для Π²ΠΈΡ‚Π°ΠΌΠΈΠ½ΠΎΠ² B, C, D ΠΈ E, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ систСму:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg.solve(), Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ коэффициСнтов A ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ нСзависимых Ρ‡Π»Π΅Π½ΠΎΠ² b, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scipy.linalg.solve(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ x ₁, …, x β‚…:

In [1]: import numpy as np
   ...: from scipy import linalg

In [2]: A = np.array(
   ...:     [
   ...:         [1, 9, 2, 1, 1],
   ...:         [10, 1, 2, 1, 1],
   ...:         [1, 0, 5, 1, 1],
   ...:         [2, 1, 1, 2, 9],
   ...:         [2, 1, 2, 13, 2],
   ...:     ]
   ...: )

In [3]: b = np.array([170, 180, 140, 180, 350]).reshape((5, 1))

In [4]: x = linalg.solve(A, b)
   ...: x
Out[4]:
array([[10.],
       [10.],
       [20.],
       [20.],
       [10.]])

Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сбалансированный Ρ€Π°Ρ†ΠΈΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ 10 Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΠΈΡ‰ΠΈ 1, 10 Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΠΈΡ‰ΠΈ 2, 20 Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΠΈΡ‰ΠΈ 3, 20 Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΠΈΡ‰ΠΈ 4 ΠΈ 10 Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΏΠΈΡ‰ΠΈ 5.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ! Π’Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ scipy.linalg для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡, связанных с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ систСмами. Π’Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‡Ρ‚ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ практичСских ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ эффСктивно ΠΈΡ… Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ.

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ:

  • ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ практичСских Π·Π°Π΄Π°Ρ‡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ scipy.linalg
  • Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Python ΠΈ NumPy
  • ΠœΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ практичСскиС Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… систСм
  • Π Π΅ΡˆΠ°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ систСмы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ scipy.linalg
***
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
08 октября 2017

13 рСсурсов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ

Π‘Ρ€Π΅Π΄ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ споры ΠΎ Ρ‚ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒΒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...