Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΈ массивы NumPy Π² Python

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° β€” это двухмСрная структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ числа располоТСны Π² Π²ΠΈΠ΄Π΅ строк ΠΈ столбцов. НапримСр:

Π­Ρ‚Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ Ρ‚Ρ€ΠΈ Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° состоит ΠΈΠ· 3 строк ΠΈ 4 столбцов.

  • ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python
  • NumPy массивы Π² Python
  • Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив NumPy?
    • Массив Ρ†Π΅Π»Ρ‹Ρ… чисСл, чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ составных чисСл
    • Массив Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†
    • ИспользованиС arange() ΠΈ shape()
  • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ
    • Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈΠ»ΠΈ сумма элСмСнтов массива Python
    • Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Python
    • ВранспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΈΡ‚ΠΎΠ½
  • Доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, строкам ΠΈ столбца
    • Доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    • Доступ ΠΊ строкам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    • Доступ ΠΊ столбцам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
  • Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Python Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Но ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ список ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. НапримСр:

A = [[1, 4, 5], 
    [-5, 8, 9]]

Π­Ρ‚ΠΎΡ‚ список являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ Π½Π° 2 строки ΠΈ 3 столбца.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ спискам Python, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ списком.

A = [[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]]
print("A =", A) 
print("A[1] =", A[1])      # вторая строка
print("A[1][2] =", A[1][2])   # Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки
print("A[0][-1] =", A[0][-1])   # послСдний элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
column = [];        # пустой список
for row in A:
  column.append(row[2])   
print("3rd column =", column)

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]
A [1] = [-5, 8, 9, 0]
A [1] [2] = 9
A [0] [- 1] = 12
3-ΠΉ столбСц = [5, 9, 11]

ИспользованиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков Π² качСствС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для простых Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Но Π² Python Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивный способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ – NumPy .

NumPy β€” это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… вычислСний, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ N-ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NumPy, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ,

  • ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ: Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ NumPy Python?
  • Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Windows, скачайтС ΠΈ установитС дистрибутив anaconda Python. Он поставляСтся вмСстС с NumPy ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ.

ПослС установки NumPy ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

NumPy прСдоставляСт собой ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив чисСл (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ). Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

import numpy as np
a = np.array([1, 2, 3])
print(a)               # Π’Ρ‹Π²ΠΎΠ΄: [1, 2, 3]
print(type(a))         # Π’Ρ‹Π²ΠΎΠ΄: <class 'numpy.ndarray'>

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, класс массива NumPy называСтся ndarray.

БущСствуСт нСсколько способов создания массивов NumPy.

import numpy as np
A = np.array([[1, 2, 3], [3, 4, 5]])
print(A)
A = np.array([[1.1, 2, 3], [3, 4, 5]]) # Массив чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
print(A)
A = np. array([[1, 2, 3], [3, 4, 5]], dtype = complex) # Массив составных чисСл
print(A)

Когда Π²Ρ‹ запуститС эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

[[1 2 3]
 [3 4 5]]
[[1.1 2. 3.]
 [3. 4. 5.]]
[[1. + 0.j 2. + 0.j 3. + 0.j]
 [3. + 0.j 4. + 0.j 5. + 0.j]]
import numpy as np
zeors_array = np.zeros( (2, 3) )
print(zeors_array)
'''
 Π’Ρ‹Π²ΠΎΠ΄:
 [[0. 0. 0.]
  [0. 0. 0.]]
'''
ones_array = np.ones( (1, 5), dtype=np.int32 ) // ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ dtype
print(ones_array)      # Π’Ρ‹Π²ΠΎΠ΄: [[1 1 1 1 1]]

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ dtype β€” 32 Π±ΠΈΡ‚Π° (4 Π±Π°ΠΉΡ‚Π°). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, этот массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ -2-31 Π΄ΠΎ 2-31-1.

import numpy as np
A = np.arange(4)
print('A =', A)
B = np.arange(12).reshape(2, 6)
print('B =', B)
''' 
Π’Ρ‹Π²ΠΎΠ΄:
A = [0 1 2 3]
B = [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
'''

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… способах создания массива NumPy .

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ слоТСниС, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. ΠœΡ‹ использовали Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Рассмотрим, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ массив NumPy.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ +, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† NumPy.

import numpy as np
A = np.array([[2, 4], [5, -6]])
B = np.array([[9, -3], [3, 6]])
C = A + B      # слоТСниС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов
print(C)
''' 
Π’Ρ‹Π²ΠΎΠ΄:
[[11  1]
 [ 8  0]]
 '''

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ dot(). Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ numpy.dot .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для умноТСния массива (умноТСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π΄Π²ΡƒΡ… массивов), Π° Π½Π΅ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

import numpy as np
A = np.array([[3, 6, 7], [5, -3, 0]])
B = np.array([[1, 1], [2, 1], [3, -3]])
C = a.dot(B)
print(C)
''' 
Π’Ρ‹Π²ΠΎΠ΄:
[[ 36 -12]
 [ -1   2]]
'''

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ numpy.transpose для вычислСния транспонирования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

import numpy as np
A = np.array([[1, 1], [2, 1], [3, -3]])
print(A.transpose())
''' 
Π’Ρ‹Π²ΠΎΠ΄:
[[ 1  2  3]
 [ 1  1 -3]]
'''

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, NumPy Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упростил Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСкс. НачнСм с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива NumPy.

import numpy as np
A = np.array([2, 4, 6, 8, 10])
print("A[0] =", A[0])     # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт     
print("A[2] =", A[2])     # Π’Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт     
print("A[-1] =", A[-1])   # ПослСдний элСмСнт     

Когда Π²Ρ‹ запуститС эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [0] = 2
A [2] = 6
A [-1] = 10

Π’Π΅ΠΏΠ΅Ρ€ΡŒ выясним, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² основном прСдставляСт собой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ).

import numpy as np
A = np.array([[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
#  ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
print("A[0][0] =", A[0][0])  
# Π’Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки
print("A[1][2] =", A[1][2])
# ПослСдний элСмСнт послСднСй строки
print("A[-1][-1] =", A[-1][-1])     

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [0] [0] = 1
A [1] [2] = 9
A [-1] [- 1] = 19
import numpy as np
A = np. array([[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
print("A[0] =", A[0]) # ΠŸΠ΅Ρ€Π²Π°Ρ строка
print("A[2] =", A[2]) # Π’Ρ€Π΅Ρ‚ΡŒΡ строка
print("A[-1] =", A[-1]) # ПослСдняя строка (Ρ‚Ρ€Π΅Ρ‚ΡŒΡ строка Π² Π΄Π°Π½Π½ΠΎΠΌ случаС)

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [0] = [1, 4, 5, 12]
A [2] = [-6, 7, 11, 19]
A [-1] = [-6, 7, 11, 19]
import numpy as np
A = np.array([[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
print("A[:,0] =",A[:,0]) # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ столбСц
print("A[:,3] =", A[:,3]) # Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ столбСц
print("A[:,-1] =", A[:,-1]) # ПослСдний столбСц (Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ столбСц Π² Π΄Π°Π½Π½ΠΎΠΌ случаС)

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [:, 0] = [1 -5 -6]
A [:, 3] = [12 0 19]
A [:, - 1] = [12 0 19]

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» Β«Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹Β».

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива NumPy Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ списка. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

import numpy as np
letters = np. array([1, 3, 5, 7, 9, 7, 5])
# с 3-Π³ΠΎ ΠΏΠΎ 5-Ρ‹ΠΉ элСмСнты
print(letters[2:5])        # Π’Ρ‹Π²ΠΎΠ΄: [5, 7, 9]
# с 1-Π³ΠΎ ΠΏΠΎ 4-Ρ‹ΠΉ элСмСнты
print(letters[:-5])        # Π’Ρ‹Π²ΠΎΠ΄: [1, 3]   
# с 6-Π³ΠΎ Π΄ΠΎ послСднСго элСмСнта
print(letters[5:])         # Π’Ρ‹Π²ΠΎΠ΄:[7, 5]
# с 1-Π³ΠΎ Π΄ΠΎ послСднСго элСмСнта
print(letters[:])          # Π’Ρ‹Π²ΠΎΠ΄:[1, 3, 5, 7, 9, 7, 5]
# список Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС
print(letters[::-1])          # Π’Ρ‹Π²ΠΎΠ΄:[5, 7, 9, 7, 5, 3, 1]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

import numpy as np
A = np.array([[1, 4, 5, 12, 14], 
    [-5, 8, 9, 0, 17],
    [-6, 7, 11, 19, 21]])
print(A[:2, :4])  # Π΄Π²Π΅ строки, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ столбца
''' Π’Ρ‹Π²ΠΎΠ΄:
[[ 1  4  5 12]
 [-5  8  9  0]]
'''
print(A[:1,])  # пСрвая строка, всС столбцы
''' Π’Ρ‹Π²ΠΎΠ΄:
[[ 1  4  5 12 14]]
'''
print(A[:,2])  # всС строки, Π²Ρ‚ΠΎΡ€ΠΎΠΉ столбСц
''' Π’Ρ‹Π²ΠΎΠ΄:
[ 5  9 11]
'''
print(A[:, 2:5])  # всС строки, с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΏΠΎ пятый столбСц
''' Π’Ρ‹Π²ΠΎΠ΄:
[[ 5 12 14]
 [ 9  0 17]
 [11 19 21]]
'''

ИспользованиС NumPy вмСсто Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ NumPy, Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°Π΄ΠΈΠΌ Π”Π²ΠΎΡ€Π½ΠΈΠΊΠΎΠ²Π°Π²Ρ‚ΠΎΡ€-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«Python Matrices and NumPy ArraysΒ»

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΈ массивы NumPy Π² Python

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° β€” это двухмСрная структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ числа располоТСны Π² Π²ΠΈΠ΄Π΅ строк ΠΈ столбцов. НапримСр:

Π­Ρ‚Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ Ρ‚Ρ€ΠΈ Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° состоит ΠΈΠ· 3 строк ΠΈ 4 столбцов.

  • ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python
  • NumPy массивы Π² Python
  • Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив NumPy?
    • Массив Ρ†Π΅Π»Ρ‹Ρ… чисСл, чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ составных чисСл
    • Массив Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†
    • ИспользованиС arange() ΠΈ shape()
  • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ
    • Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈΠ»ΠΈ сумма элСмСнтов массива Python
    • Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Python
    • ВранспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΈΡ‚ΠΎΠ½
  • Доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, строкам ΠΈ столбца
    • Доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    • Доступ ΠΊ строкам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    • Доступ ΠΊ столбцам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
  • Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Python Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Но ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ список ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. НапримСр:

A = [[1, 4, 5], 
    [-5, 8, 9]]

Π­Ρ‚ΠΎΡ‚ список являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ Π½Π° 2 строки ΠΈ 3 столбца.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ спискам Python, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ списком.

A = [[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]]
print("A =", A) 
print("A[1] =", A[1])      # вторая строка
print("A[1][2] =", A[1][2])   # Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки
print("A[0][-1] =", A[0][-1])   # послСдний элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
column = [];        # пустой список
for row in A:
  column.append(row[2])   
print("3rd column =", column)

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]
A [1] = [-5, 8, 9, 0]
A [1] [2] = 9
A [0] [- 1] = 12
3-ΠΉ столбСц = [5, 9, 11]

ИспользованиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков Π² качСствС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для простых Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Но Π² Python Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивный способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ – NumPy .

NumPy β€” это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… вычислСний, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ N-ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NumPy, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ,

  • ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ: Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ NumPy Python?
  • Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Windows, скачайтС ΠΈ установитС дистрибутив anaconda Python. Он поставляСтся вмСстС с NumPy ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ.

ПослС установки NumPy ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

NumPy прСдоставляСт собой ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив чисСл (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ). Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

import numpy as np
a = np.array([1, 2, 3])
print(a)               # Π’Ρ‹Π²ΠΎΠ΄: [1, 2, 3]
print(type(a))         # Π’Ρ‹Π²ΠΎΠ΄: <class 'numpy.ndarray'>

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, класс массива NumPy называСтся ndarray.

БущСствуСт нСсколько способов создания массивов NumPy.

import numpy as np
A = np.array([[1, 2, 3], [3, 4, 5]])
print(A)
A = np.array([[1.1, 2, 3], [3, 4, 5]]) # Массив чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
print(A)
A = np. array([[1, 2, 3], [3, 4, 5]], dtype = complex) # Массив составных чисСл
print(A)

Когда Π²Ρ‹ запуститС эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

[[1 2 3]
 [3 4 5]]
[[1.1 2. 3.]
 [3. 4. 5.]]
[[1. + 0.j 2. + 0.j 3. + 0.j]
 [3. + 0.j 4. + 0.j 5. + 0.j]]
import numpy as np
zeors_array = np.zeros( (2, 3) )
print(zeors_array)
'''
 Π’Ρ‹Π²ΠΎΠ΄:
 [[0. 0. 0.]
  [0. 0. 0.]]
'''
ones_array = np.ones( (1, 5), dtype=np.int32 ) // ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ dtype
print(ones_array)      # Π’Ρ‹Π²ΠΎΠ΄: [[1 1 1 1 1]]

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ dtype β€” 32 Π±ΠΈΡ‚Π° (4 Π±Π°ΠΉΡ‚Π°). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, этот массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ -2-31 Π΄ΠΎ 2-31-1.

import numpy as np
A = np.arange(4)
print('A =', A)
B = np.arange(12).reshape(2, 6)
print('B =', B)
''' 
Π’Ρ‹Π²ΠΎΠ΄:
A = [0 1 2 3]
B = [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
'''

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… способах создания массива NumPy .

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ слоТСниС, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. ΠœΡ‹ использовали Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Рассмотрим, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ массив NumPy.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ +, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† NumPy.

import numpy as np
A = np.array([[2, 4], [5, -6]])
B = np.array([[9, -3], [3, 6]])
C = A + B      # слоТСниС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов
print(C)
''' 
Π’Ρ‹Π²ΠΎΠ΄:
[[11  1]
 [ 8  0]]
 '''

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ dot(). Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ numpy.dot .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для умноТСния массива (умноТСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π΄Π²ΡƒΡ… массивов), Π° Π½Π΅ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

import numpy as np
A = np.array([[3, 6, 7], [5, -3, 0]])
B = np.array([[1, 1], [2, 1], [3, -3]])
C = a.dot(B)
print(C)
''' 
Π’Ρ‹Π²ΠΎΠ΄:
[[ 36 -12]
 [ -1   2]]
'''

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ numpy.transpose для вычислСния транспонирования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

import numpy as np
A = np.array([[1, 1], [2, 1], [3, -3]])
print(A.transpose())
''' 
Π’Ρ‹Π²ΠΎΠ΄:
[[ 1  2  3]
 [ 1  1 -3]]
'''

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, NumPy Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упростил Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСкс. НачнСм с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива NumPy.

import numpy as np
A = np.array([2, 4, 6, 8, 10])
print("A[0] =", A[0])     # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт     
print("A[2] =", A[2])     # Π’Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт     
print("A[-1] =", A[-1])   # ПослСдний элСмСнт     

Когда Π²Ρ‹ запуститС эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [0] = 2
A [2] = 6
A [-1] = 10

Π’Π΅ΠΏΠ΅Ρ€ΡŒ выясним, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² основном прСдставляСт собой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ).

import numpy as np
A = np.array([[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
#  ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
print("A[0][0] =", A[0][0])  
# Π’Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки
print("A[1][2] =", A[1][2])
# ПослСдний элСмСнт послСднСй строки
print("A[-1][-1] =", A[-1][-1])     

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [0] [0] = 1
A [1] [2] = 9
A [-1] [- 1] = 19
import numpy as np
A = np. array([[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
print("A[0] =", A[0]) # ΠŸΠ΅Ρ€Π²Π°Ρ строка
print("A[2] =", A[2]) # Π’Ρ€Π΅Ρ‚ΡŒΡ строка
print("A[-1] =", A[-1]) # ПослСдняя строка (Ρ‚Ρ€Π΅Ρ‚ΡŒΡ строка Π² Π΄Π°Π½Π½ΠΎΠΌ случаС)

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [0] = [1, 4, 5, 12]
A [2] = [-6, 7, 11, 19]
A [-1] = [-6, 7, 11, 19]
import numpy as np
A = np.array([[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
print("A[:,0] =",A[:,0]) # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ столбСц
print("A[:,3] =", A[:,3]) # Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ столбСц
print("A[:,-1] =", A[:,-1]) # ПослСдний столбСц (Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ столбСц Π² Π΄Π°Π½Π½ΠΎΠΌ случаС)

Когда ΠΌΡ‹ запустим эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

A [:, 0] = [1 -5 -6]
A [:, 3] = [12 0 19]
A [:, - 1] = [12 0 19]

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» Β«Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹Β».

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива NumPy Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ списка. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

import numpy as np
letters = np. array([1, 3, 5, 7, 9, 7, 5])
# с 3-Π³ΠΎ ΠΏΠΎ 5-Ρ‹ΠΉ элСмСнты
print(letters[2:5])        # Π’Ρ‹Π²ΠΎΠ΄: [5, 7, 9]
# с 1-Π³ΠΎ ΠΏΠΎ 4-Ρ‹ΠΉ элСмСнты
print(letters[:-5])        # Π’Ρ‹Π²ΠΎΠ΄: [1, 3]   
# с 6-Π³ΠΎ Π΄ΠΎ послСднСго элСмСнта
print(letters[5:])         # Π’Ρ‹Π²ΠΎΠ΄:[7, 5]
# с 1-Π³ΠΎ Π΄ΠΎ послСднСго элСмСнта
print(letters[:])          # Π’Ρ‹Π²ΠΎΠ΄:[1, 3, 5, 7, 9, 7, 5]
# список Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС
print(letters[::-1])          # Π’Ρ‹Π²ΠΎΠ΄:[5, 7, 9, 7, 5, 3, 1]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

import numpy as np
A = np.array([[1, 4, 5, 12, 14], 
    [-5, 8, 9, 0, 17],
    [-6, 7, 11, 19, 21]])
print(A[:2, :4])  # Π΄Π²Π΅ строки, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ столбца
''' Π’Ρ‹Π²ΠΎΠ΄:
[[ 1  4  5 12]
 [-5  8  9  0]]
'''
print(A[:1,])  # пСрвая строка, всС столбцы
''' Π’Ρ‹Π²ΠΎΠ΄:
[[ 1  4  5 12 14]]
'''
print(A[:,2])  # всС строки, Π²Ρ‚ΠΎΡ€ΠΎΠΉ столбСц
''' Π’Ρ‹Π²ΠΎΠ΄:
[ 5  9 11]
'''
print(A[:, 2:5])  # всС строки, с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΏΠΎ пятый столбСц
''' Π’Ρ‹Π²ΠΎΠ΄:
[[ 5 12 14]
 [ 9  0 17]
 [11 19 21]]
'''

ИспользованиС NumPy вмСсто Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ NumPy, Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°Π΄ΠΈΠΌ Π”Π²ΠΎΡ€Π½ΠΈΠΊΠΎΠ²Π°Π²Ρ‚ΠΎΡ€-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«Python Matrices and NumPy ArraysΒ»

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Python ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² NumPy

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ… Python с использованиСм Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° NumPy.

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° β€” это двумСрная структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ числа располоТСны Π² строках ΠΈ столбцах. НапримСр:

Π­Ρ‚Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° прСдставляСт собой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 3Γ—4 (произносится ΠΊΠ°ΠΊ Β«Ρ‚Ρ€ΠΈ Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Β»), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ 3 строки ΠΈ 4 столбца.


Python Matrix

Python Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнного Ρ‚ΠΈΠΏΠ° для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Однако ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ список списка ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. НапримСр:

 А = [[1, 4, 5],
    [-5, 8, 9]]
 

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ этот список ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ 2 строки ΠΈ 3 столбца.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ списки Python, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ.


Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ списком.

 А = [[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ("А=", А)
print("A[1] =", A[1]) # 2-я строка
print("A[1][2] =", A[1][2]) # 3-ΠΉ элСмСнт 2-ΠΉ строки
print("A[0][-1] =", A[0][-1]) # ПослСдний элСмСнт 1-ΠΉ строки
столбСц = []; # пустой список
для строки Π² A:
  столбСц.Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ (строка [2])
print("3-ΠΉ столбСц =", столбСц)
 

Когда ΠΌΡ‹ запустим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚:

  А = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]
А[1] = [-5, 8, 9, 0]
А[1][2] = 9
А[0][-1] = 12
3-ΠΉ столбСц = [5, 9, 11]
  

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², связанных с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Python с использованиСм Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков.

  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
  • Π’Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
  • Π£ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

ИспользованиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков Π² качСствС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для простых Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π² Python с использованиСм ΠΏΠ°ΠΊΠ΅Ρ‚Π° NumPy.


NumPy Array

NumPy β€” это ΠΏΠ°ΠΊΠ΅Ρ‚ для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… вычислСний, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ N-ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NumPy, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ,

  • ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅: Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ NumPy?
  • Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Windows, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΈ установитС дистрибутив Python anaconda. Он поставляСтся с NumPy ΠΈ нСсколькими Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, связанными с Π½Π°ΡƒΠΊΠΎΠΉ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ.

ПослС установки NumPy Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.


NumPy прСдоставляСт ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив чисСл (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ). Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
а = np.массив ([1, 2, 3])
print(a) # Π’Ρ‹Π²ΠΎΠ΄: [1, 2, 3]
print(type(a)) # Π’Ρ‹Π²ΠΎΠ΄: 
 

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, класс массива NumPy называСтся ndarray .


Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив NumPy?

БущСствуСт нСсколько способов создания массивов NumPy.


1. Массив Ρ†Π΅Π»Ρ‹Ρ…, вСщСствСнных ΠΈ комплСксных чисСл

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
A = np. массив ([[1, 2, 3], [3, 4, 5]])
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ(А)
A = np.array([[1.1, 2, 3], [3, 4, 5]]) # Массив чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ(А)
A = np.array([[1, 2, 3], [3, 4, 5]], dtype = complex) # Массив комплСксных чисСл
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ(А)
 

Когда Π²Ρ‹ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚:

  [[1 2 3]
 [3 4 5]]
[[1.1 2. 3. ]
 [3. 4. 5. ]]
[[1.+0.j 2.+0.j 3.+0.j]
 [3.+0.ΠΊ 4.+0.ΠΊ 5.+0.ΠΊ]]
  

2. Массив Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
zeors_array = np.zeros ((2, 3))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (zeors_array)
'''
 Π’Ρ‹Ρ…ΠΎΠ΄:
 [[0. 0. 0.]
  [0. 0. 0.]]
'''
one_array = np.ones( (1, 5), dtype=np.int32 ) // ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ dtype
print(ones_array) # Π’Ρ‹Π²ΠΎΠ΄: [[1 1 1 1 1]]
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ dtype Π΄ΠΎ 32 Π±ΠΈΡ‚ (4 Π±Π°ΠΉΡ‚Π°). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, этот массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ -2 -31 Π΄ΠΎ 2 -31 -1 .


3. ИспользованиС arange() и shape()

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
A = np.arange(4)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ('А =', А)
B = np. arange(12).reshape(2, 6)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ('Π’ =', Π’)
'''
Π’Ρ‹Ρ…ΠΎΠ΄:
А = [0 1 2 3]
Π’ = [[ 0 1 2 3 4 5]
 [ 6 7 8 9 10 11]]
'''
 

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… способах создания массива NumPy.


ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ 3 ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°: слоТСниС Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. РаньшС ΠΌΡ‹ использовали Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки для написания этих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ массив NumPy.


Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ + для добавлСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† NumPy.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
A = np.массив ([[2, 4], [5, -6]])
B = np.массив([[9, -3], [3, 6]])
C = A + B # поэлСмСнтноС слоТСниС
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ(Π‘)
'''
Π’Ρ‹Ρ…ΠΎΠ΄:
[[11 1]
 [ 8 0]]
 ''' 

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ dot() . Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ numpy.dot.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для умноТСния массивов (умноТСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π΄Π²ΡƒΡ… массивов), Π° Π½Π΅ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
A = np.массив ([[3, 6, 7], [5, -3, 0]])
B = np.массив ([[1, 1], [2, 1], [3, -3]])
Π‘ = А. Ρ‚ΠΎΡ‡ΠΊΠ° (Π’)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ(Π‘)
'''
Π’Ρ‹Ρ…ΠΎΠ΄:
[[ 36 -12]
 [-1 2]]
'''
 

ВранспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ numpy.transpose для вычислСния транспонирования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
A = np.массив ([[1, 1], [2, 1], [3, -3]])
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (A.transpose())
'''
Π’Ρ‹Ρ…ΠΎΠ΄:
[[ 1 2 3]
 [ 1 1 -3]]
'''
 

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, NumPy Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΠ» Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ.


Доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, строкам ΠΈ столбцам

Доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Подобно спискам, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСкс. НачнСм с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива NumPy.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
А = np.массив ([2, 4, 6, 8, 10])
print("A[0] =", A[0]) # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт
print("A[2] =", A[2]) # Π’Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт
print("A[-1] =", A[-1]) # ПослСдний элСмСнт
 

Когда Π²Ρ‹ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚:

  А[0] = 2
А[2] = 6
А[-1] = 10
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² основном являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ).

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
A = np.массив([[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
# ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ("А[0][0] =", А[0][0])
# Π’Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ("А[1][2] =", А[1][2])
# ПослСдний элСмСнт послСднСй строки
print("А[-1][-1] =", А[-1][-1])
 

Когда ΠΌΡ‹ запустим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚:

  А[0][0] = 1
А[1][2] = 9
А[-1][-1] = 19
  

Доступ ΠΊ строкам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ numpy ΠΊΠ°ΠΊ np
A = np.массив([[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
print("A[0] =", A[0]) # ΠŸΠ΅Ρ€Π²Π°Ρ строка
print("A[2] =", A[2]) # Π’Ρ€Π΅Ρ‚ΡŒΡ строка
print("A[-1] =", A[-1]) # ПослСдняя строка (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 3-я строка) 

Когда ΠΌΡ‹ запустим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚:

  А[0] = [1, 4, 5, 12]
А[2] = [-6, 7, 11, 19]
А[-1] = [-6, 7, 11, 19]
  

Доступ ΠΊ столбцам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ numpy ΠΊΠ°ΠΊ np
A = np.массив([[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])
print("A[:,0] =",A[:,0]) # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ столбСц
print("A[:,3] =", A[:,3]) # Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ столбСц
print("A[:,-1] =", A[:,-1]) # ПослСдний столбСц (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 4-ΠΉ столбСц)
 

Когда ΠΌΡ‹ запустим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚:

  А[:,0] = [ 1 -5 -6]
А[:,3] = [12 0 19]
А[:,-1] = [12 0 19]
  

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» ΠΎ Π½Π°Ρ€Π΅Π·ΠΊΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.


НарСзка ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

НарСзка ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива NumPy Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° списку. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Ρ€Π΅Π·ΠΊΠ° для списка, посСтитС ΡΡ‚Π°Ρ‚ΡŒΡŽ ПониманиС Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ срСзов Π² Python.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
Π±ΡƒΠΊΠ²Ρ‹ = np.array([1, 3, 5, 7, 9, 7, 5])
# элСмСнты с 3-Π³ΠΎ ΠΏΠΎ 5-ΠΉ
print(letters[2:5]) # Π’Ρ‹Π²ΠΎΠ΄: [5, 7, 9]
# элСмСнты с 1-Π³ΠΎ ΠΏΠΎ 4-ΠΉ
print(letters[:-5]) # Π’Ρ‹Π²ΠΎΠ΄: [1, 3]
# ΠΎΡ‚ 6-Π³ΠΎ Π΄ΠΎ послСднСго элСмСнта
print(letters[5:]) # Π’Ρ‹Π²ΠΎΠ΄:[7, 5]
# ΠΎΡ‚ 1-Π³ΠΎ Π΄ΠΎ послСднСго элСмСнта
print(letters[:]) # Π’Ρ‹Π²ΠΎΠ΄:[1, 3, 5, 7, 9, 7, 5]
# ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ списка
print(letters[::-1]) # Π’Ρ‹Π²ΠΎΠ΄:[5, 7, 9, 7, 5, 3, 1]
 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
A = np.массив([[1, 4, 5, 12, 14],
    [-5, 8, 9, 0, 17],
    [-6, 7, 11, 19, 21]])
print(A[:2, :4]) # Π΄Π²Π΅ строки, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ столбца
''' Π’Ρ‹Ρ…ΠΎΠ΄:
[[ 1 4 5 12]
 [-5 8 9 0]]
'''
print(A[:1,]) # пСрвая строка, всС столбцы
''' Π’Ρ‹Ρ…ΠΎΠ΄:
[[ 1 4 5 12 14]]
'''
print(A[:,2]) # всС строки, Π²Ρ‚ΠΎΡ€ΠΎΠΉ столбСц
''' Π’Ρ‹Ρ…ΠΎΠ΄:
[ 5 9 11 ]
'''
print(A[:, 2:5]) # всС строки, с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΏΠΎ пятый столбСц
'''Π’Ρ‹Ρ…ΠΎΠ΄:
[[ 5 12 14]
 [ 9 0 17 ]
 [11 19 21]]
'''
 

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, использованиС NumPy (вмСсто Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков) Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, ΠΈ ΠΌΡ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΊΠΎΡΠ½ΡƒΠ»ΠΈΡΡŒ основ. ΠœΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ NumPy, особСнно Ссли Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ….

РСсурсы NumPy, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ:

  • Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ NumPy
  • Бсылка NumPy

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Python для умноТСния Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ научимся ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ двумя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами: Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ списком.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ программирования Python :

Π’ Python ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΊΠ°ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список (список Π²Π½ΡƒΡ‚Ρ€ΠΈ списка).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ строку ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

НапримСр, X = [[1, 2], [4, 5], [3, 6]] Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 3x2 .

ΠŸΠ΅Ρ€Π²ΡƒΡŽ строку ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ X[0] . И элСмСнт Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС, ΠΏΠ΅Ρ€Π²ΠΎΠΌ столбцС ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ X[0][0] .

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† X ΠΈ Y опрСдСляСтся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли количСство столбцов Π² X Ρ€Π°Π²Π½ΠΎ количСству строк Y .

Если X являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ n x m , Π° Y являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ m x l , Ρ‚ΠΎ XY ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ n x l (Π½ΠΎ 5 YX Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ). Π’ΠΎΡ‚ нСсколько способов Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ΅ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Python.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† с использованиСм Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°

 # ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для умноТСния Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† с использованиСм Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ²
#ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 3Ρ…3
Π₯ = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
#ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 3Ρ…4
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 3x4
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = [[0,0,0,0],
         [0,0,0,0],
         [0,0,0,0]]
# ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ строки X
для i в диапазонС (len (X)):
   # ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ столбцы Y
   для j в диапазонС (len (Y [0])):
       # ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ строки Y
       для k в диапазонС (len (Y)):
           Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚[i][j] += X[i][k] * Y[k][j]
для r Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅:
   ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ€)
 

Π’Ρ‹Ρ…ΠΎΠ΄

  [114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23] 
 

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ использовали Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ для Ρ†ΠΈΠΊΠ»ΠΎΠ² для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ столбца. Π‘ΡƒΠΌΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ суммируСм Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ прост, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ порядок ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NumPy, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² нСсколько (порядка 1000) Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† с использованиСм понимания Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков

 # ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для умноТСния Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† с использованиСм понимания списков
#ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 3Ρ…3
Π₯ = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
#ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 3Ρ…4
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 3x4
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = [[сумма(a*b для a,b Π² zip(X_row,Y_col)) для Y_col Π² zip(*Y)] для X_row Π² X]
для r Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅:
   ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ€)
 

Π’Ρ‹Π²ΠΎΠ΄ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π²Ρ‹ΡˆΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ zip() ΠΈ распаковкС списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° *.

ΠœΡ‹ использовали Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅.