Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

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

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

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

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Β» , подготовлСнная Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

100 NumPy Π·Π°Π΄Π°Ρ‡ | Python 3 для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΈ Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²

100 (Π½Π° самом Π΄Π΅Π»Π΅, ΠΏΠΎΠΊΠ° мСньшС) Π·Π°Π΄Π°Ρ‡ для NumPy, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ английского Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° https://github.com/rougier/numpy-100

  • Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ NumPy ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ np

  • ΠΠ°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ

    print(np.__version__)
    np.show_config()
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ (ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив) Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 10, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ нулями

    Z = np.zeros(10)
    print(Z)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 10, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ

  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 10, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ числом 2.5

    Z = np.full(10, 2.5)
    print(Z)
  • Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ numpy.add ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки?

    python3 -c "import numpy; numpy.info(numpy.add)"
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 10, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ нулями, Π½ΠΎ пятый элСмСнт Ρ€Π°Π²Π΅Π½ 1

    Z = np. zeros(10)
    Z[4] = 1
    print(Z)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ со значСниями ΠΎΡ‚ 10 Π΄ΠΎ 49

    Z = np.arange(10,50)
    print(Z)
  • Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ становится послСдним)

    Z = np.arange(50)
    Z = Z[::-1]
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ (Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив) 3×3 со значСниями ΠΎΡ‚ 0 Π΄ΠΎ 8

    Z = np.arange(9).reshape(3,3)
    print(Z)
  • Найти индСксы Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов Π² [1,2,0,0,4,0]

    nz = np.nonzero([1,2,0,0,4,0])
    print(nz)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ 3×3 Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ массив 3x3x3 со случайными значСниями

    Z = np.random.random((3,3,3))
    print(Z)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ массив 10×10 со случайными значСниями, Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈ максимум

    Z = np.random.random((10,10))
    Zmin, Zmax = Z.min(), Z.max()
    print(Zmin, Zmax)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ случайный Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 30 ΠΈ Π½Π°ΠΉΡ‚ΠΈ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСх элСмСнтов

    Z = np.random.random(30)
    m = Z.mean()
    print(m)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ с 0 Π²Π½ΡƒΡ‚Ρ€ΠΈ, ΠΈ 1 Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ…

    Z = np. ones((10,10))
    Z[1:-1,1:-1] = 0
  • Π’Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

    0 * np.nan
    np.nan == np.nan
    np.inf > np.nan
    np.nan - np.nan
    0.3 == 3 * 0.1
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ 5×5 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ с 1,2,3,4 ΠΏΠΎΠ΄ диагональю

    Z = np.diag(np.arange(1, 5), k=-1)
    print(Z)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ 8×8 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π² ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΌ порядкС

    Z = np.zeros((8,8), dtype=int)
    Z[1::2,::2] = 1
    Z[::2,1::2] = 1
    print(Z)
  • Π”Π°Π½ массив размСрности (6,7,8). Каков индСкс (x,y,z) сотого элСмСнта?

    print(np.unravel_index(100, (6,7,8)))
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ 8×8 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π² ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΌ порядкС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ tile

    Z = np.tile(np.array([[0,1],[1,0]]), (4,4))
    print(Z)
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ 5×3 ΠΈ 3×2

    Z = np.dot(np.ones((5,3)), np.ones((3,2)))
    print(Z)
  • Π”Π°Π½ массив, ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°ΠΊ Ρƒ элСмСнтов, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ 3 ΠΈ 8

    Z = np.arange(11)
    Z[(3 < Z) & (Z <= 8)] *= -1
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ 5×5 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ со значСниями Π² строках ΠΎΡ‚ 0 Π΄ΠΎ 4

    Z = np. zeros((5,5))
    Z += np.arange(5)
    print(Z)
  • Π•ΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массив

    def generate():
        for x in xrange(10):
            yield x
    Z = np.fromiter(generate(),dtype=float,count=-1)
    print(Z)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 10 со значСниями ΠΎΡ‚ 0 Π΄ΠΎ 1, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½ΠΈ Ρ‚ΠΎ, Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅

    Z = np.linspace(0,1,12)[1:-1]
    print(Z)
  • ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€

    Z = np.random.random(10)
    Z.sort()
    print(Z)
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ Π»ΠΈ 2 numpy массива

    A = np.random.randint(0,2,5)
    B = np.random.randint(0,2,5)
    equal = np.allclose(A,B)
    print(equal)
  • Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ массив нСизмСняСмым

    Z = np.zeros(10)
    Z.flags.writeable = False
    Z[0] = 1
  • Π”Π°Π½ массив 10×2 (Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΠΎΠ»ΡΡ€Π½ΡƒΡŽ

    Z = np.random.random((10,2))
    X,Y = Z[:,0], Z[:,1]
    R = np.hypot(X, Y)
    T = np.arctan2(Y,X)
    print(R)
    print(T)
  • Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт Π½Π° ноль

    Z = np. random.random(10)
    Z[Z.argmax()] = 0
    print(Z)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ структурированный массив с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y Π½Π° сСткС Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π΅ [0,1]x[0,1]

    Z = np.zeros((10,10), [('x',float),('y',float)])
    Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,10),
                                 np.linspace(0,1,10))
    print(Z)
  • Из Π΄Π²ΡƒΡ… массивов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Коши C (Cij = 1/(xi — yj))

    X = np.arange(8)
    Y = X + 0.5
    C = 1.0 / np.subtract.outer(X, Y)
    print(np.linalg.det(C))
  • Найти минимальноС ΠΈ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ числовым Ρ‚ΠΈΠΏΠΎΠΌ numpy

    for dtype in [np.int8, np.int32, np.int64]:
       print(np.iinfo(dtype).min)
       print(np.iinfo(dtype).max)
    for dtype in [np.float32, np.float64]:
       print(np.finfo(dtype).min)
       print(np.finfo(dtype).max)
       print(np.finfo(dtype).eps)
  • ΠΠ°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ всС значСния Π² массивС

    np.set_printoptions(threshold=np.nan)
    Z = np.zeros((25,25))
    print(Z)
  • Найти блиТайшСС ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ число Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ массивС

    Z = np. arange(100)
    v = np.random.uniform(0,100)
    index = (np.abs(Z-v)).argmin()
    print(Z[index])
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ структурированный массив, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ (x,y) ΠΈ Ρ†Π²Π΅Ρ‚ (r,g,b)

     Z = np.zeros(10, [ ('position', [ ('x', float, 1),
                                       ('y', float, 1)]),
                        ('color',    [ ('r', float, 1),
                                       ('g', float, 1),
                                       ('b', float, 1)])])
    print(Z)
  • Π”Π°Π½ массив (100,2) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π½Π°ΠΉΡ‚ΠΈ расстояниС ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ

    import scipy.spatial
    
    Z = np.random.random((10,2))
    D = scipy.spatial.distance.cdist(Z,Z)
    print(D)
  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΈΠ· float Π² int

    Z = np.arange(10, dtype=np.int32)
    Z = Z.astype(np.float32, copy=False)
  • Π”Π°Π½ Ρ„Π°ΠΉΠ»:

    1,2,3,4,5
    6,,,7,8
    ,,9,10,11
    

    Как ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ?

    Z = np.genfromtxt("missing.dat", delimiter=",")
  • Каков эквивалСнт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enumerate для numpy массивов?

    Z = np. arange(9).reshape(3,3)
    for index, value in np.ndenumerate(Z):
        print(index, value)
    for index in np.ndindex(Z.shape):
        print(index, Z[index])
  • Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 2D массив с распрСдСлСниСм Гаусса

    X, Y = np.meshgrid(np.linspace(-1,1,10), np.linspace(-1,1,10))
    D = np.hypot(X, Y)
    sigma, mu = 1.0, 0.0
    G = np.exp(-((D - mu) ** 2 / (2.0 * sigma ** 2)))
    print(G)
  • Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ p элСмСнтов Π² 2D массив

    n = 10
    p = 3
    Z = np.zeros((n,n))
    np.put(Z, np.random.choice(range(n*n), p, replace=False), 1)
  • ΠžΡ‚Π½ΡΡ‚ΡŒ срСднСС ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅

    X = np.random.rand(5, 10)
    Y = X - X.mean(axis=1, keepdims=True)
  • ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΠΎ n-ΠΎΠΌΡƒ столбцу

    Z = np.random.randint(0,10,(3,3))
    n = 1  # НумСрация с нуля
    print(Z)
    print(Z[Z[:,n].argsort()])
  • ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² 2D массивС Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ столбцы

    Z = np.random.randint(0,3,(3,10))
    print((~Z.any(axis=0)).any())
  • Π”Π°Π½ массив, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 1 ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту с индСксом, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ массивС (остороТно с ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°ΠΌΠΈ)

    Z = np. ones(10)
    I = np.random.randint(0,len(Z),20)
    Z += np.bincount(I, minlength=len(Z))
    print(Z)
  • Π”Π°Π½ массив (w,h,3) (ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°) dtype=ubyte, ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²

    w,h = 16,16
    I = np.random.randint(0, 2, (h,w,3)).astype(np.ubyte)
    F = I[...,0] * 256 * 256 + I[...,1] * 256 + I[...,2]
    n = len(np.unique(F))
    print(np.unique(I))
  • Π”Π°Π½ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сумму ΠΏΠΎ послСдним Π΄Π²ΡƒΠΌ осям

    A = np.random.randint(0,10, (3,4,3,4))
    sum = A.reshape(A.shape[:-2] + (-1,)).sum(axis=-1)
    print(sum)
  • Найти Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты произвСдСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

    # Slow version
    np.diag(np.dot(A, B))
    
    # Fast version
    np.sum(A * B.T, axis=1)
    
    # Faster version
    np.einsum("ij,ji->i", A, B).
  • Π”Π°Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€ [1, 2, 3, 4, 5], ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ с трСмя нулями ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

    Z = np.array([1,2,3,4,5])
    nz = 3
    Z0 = np.zeros(len(Z) + (len(Z)-1)*(nz))
    Z0[::nz+1] = Z
    print(Z0)
  • ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ 2 строки Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅

    A = np. arange(25).reshape(5,5)
    A[[0,1]] = A[[1,0]]
    print(A)
  • Рассмотрим Π½Π°Π±ΠΎΡ€ ΠΈΠ· 10 Ρ‚Ρ€ΠΎΠ΅ΠΊ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… 10 Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² (с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ), Π½Π°ΠΉΡ‚ΠΈ мноТСство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ², ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… всС Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ

    faces = np.random.randint(0,100,(10,3))
    F = np.roll(faces.repeat(2,axis=1),-1,axis=1)
    F = F.reshape(len(F)*3,2)
    F = np.sort(F,axis=1)
    G = F.view( dtype=[('p0',F.dtype),('p1',F.dtype)] )
    G = np.unique(G)
    print(G)
  • Π”Π°Π½ массив C; ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив A, Ρ‡Ρ‚ΠΎ np.bincount(A) == C

    C = np.bincount([1,1,2,3,4,4,6])
    A = np.repeat(np.arange(len(C)), C)
    print(A)
  • ΠŸΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ срСднСС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ

    def moving_average(a, n=3):
        ret = np.cumsum(a, dtype=float)
        ret[n:] = ret[n:] - ret[:-n]
        return ret[n - 1:] / n
    
    print(moving_average(np.arange(20), 3))
  • Π”Π°Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€ Z, ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, пСрвая строка ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ (Z[0],Z[1],Z[2]), каТдая ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ сдвинута Π½Π° 1 (послСдняя (Z[-3],Z[-2],Z[-1]))

    from numpy. lib import stride_tricks
    
    def rolling(a, window):
        shape = (a.size - window + 1, window)
        strides = (a.itemsize, a.itemsize)
        return stride_tricks.as_strided(a, shape=shape, strides=strides)
    Z = rolling(np.arange(10), 3)
    print(Z)
  • Π˜Π½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°ΠΊ Ρƒ числового массива Π±Π΅Π· создания Π½ΠΎΠ²ΠΎΠ³ΠΎ

    Z = np.random.randint(0,2,100)
    np.logical_not(arr, out=arr)
    
    Z = np.random.uniform(-1.0,1.0,100)
    np.negative(arr, out=arr)
  • Рассмотрим 2 Π½Π°Π±ΠΎΡ€Π° Ρ‚ΠΎΡ‡Π΅ΠΊ P0, P1 описания Π»ΠΈΠ½ΠΈΠΈ (2D) ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ Ρ€, ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ расстояниС ΠΎΡ‚ Ρ€ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ i (P0[i],P1[i])

    def distance(P0, P1, p):
        T = P1 - P0
        L = (T**2).sum(axis=1)
        U = -((P0[:,0] - p[...,0]) * T[:,0] + (P0[:,1] - p[...,1]) * T[:,1]) / L
        U = U.reshape(len(U),1)
        D = P0 + U * T - p
        return np.sqrt((D**2).sum(axis=1))
    
    P0 = np.random.uniform(-10,10,(10,2))
    P1 = np.random.uniform(-10,10,(10,2))
    p  = np.random.uniform(-10,10,( 1,2))
    print(distance(P0, P1, p))
  • Π”Π°Π½ массив. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ массива фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° с Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ элСмСнтС (Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ fill Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ)

    Z = np.random.randint(0,10, (10,10))
    shape = (5,5)
    fill  = 0
    position = (1,1)
    
    R = np.ones(shape, dtype=Z.dtype)*fill
    P  = np.array(list(position)).astype(int)
    Rs = np.array(list(R.shape)).astype(int)
    Zs = np.array(list(Z.shape)).astype(int)
    
    R_start = np.zeros((len(shape),)).astype(int)
    R_stop  = np.array(list(shape)).astype(int)
    Z_start = (P - Rs//2)
    Z_stop  = (P + Rs//2)+Rs%2
    
    R_start = (R_start - np.minimum(Z_start, 0)).tolist()
    Z_start = (np.maximum(Z_start, 0)).tolist()
    R_stop = np.maximum(R_start, (R_stop - np.maximum(Z_stop-Zs,0))).tolist()
    Z_stop = (np.minimum(Z_stop,Zs)).tolist()
    
    r = [slice(start,stop) for start,stop in zip(R_start,R_stop)]
    z = [slice(start,stop) for start,stop in zip(Z_start,Z_stop)]
    R[r] = Z[z]
    print(Z)
    print(R)
  • ΠŸΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π½Π³ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

    Z = np.random.uniform(0,1,(10,10))
    rank = np.linalg.matrix_rank(Z)
  • Найти Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС

    Z = np. random.randint(0,10,50)
    print(np.bincount(Z).argmax())
  • Π˜Π·Π²Π»Π΅Ρ‡ΡŒ всС смСТныС 3×3 Π±Π»ΠΎΠΊΠΈ ΠΈΠ· 10×10 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

    Z = np.random.randint(0,5,(10,10))
    n = 3
    i = 1 + (Z.shape[0] - n)
    j = 1 + (Z.shape[1] - n)
    C = stride_tricks.as_strided(Z, shape=(i, j, n, n), strides=Z.strides + Z.strides)
    print(C)
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ подкласс симмСтричных 2D массивов (Z[i,j] == Z[j,i])

    # Note: only works for 2d array and value setting using indices
    
    class Symetric(np.ndarray):
        def __setitem__(self, (i,j), value):
            super(Symetric, self).__setitem__((i,j), value)
            super(Symetric, self).__setitem__((j,i), value)
    
    def symetric(Z):
        return np.asarray(Z + Z.T - np.diag(Z.diagonal())).view(Symetric)
    
    S = symetric(np.random.randint(0,10,(5,5)))
    S[2,3] = 42
    print(S)
  • Рассмотрим мноТСство ΠΌΠ°Ρ‚Ρ€ΠΈΡ† (n,n) ΠΈ мноТСство ΠΈΠ· p Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² (n,1). ΠŸΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сумму p ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ (n,1))

    p, n = 10, 20
    M = np.ones((p,n,n))
    V = np. ones((p,n,1))
    S = np.tensordot(M, V, axes=[[0, 2], [0, 1]])
    print(S)
    
    # It works, because:
    # M is (p,n,n)
    # V is (p,n,1)
    # Thus, summing over the paired axes 0 and 0 (of M and V independently),
    # and 2 and 1, to remain with a (n,1) vector.
  • Π”Π°Π½ массив 16×16, ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сумму ΠΏΠΎ Π±Π»ΠΎΠΊΠ°ΠΌ 4×4

    Z = np.ones((16,16))
    k = 4
    S = np.add.reduceat(np.add.reduceat(Z, np.arange(0, Z.shape[0], k), axis=0),
                                           np.arange(0, Z.shape[1], k), axis=1)
  • ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ «ΠΆΠΈΠ·Π½ΡŒ»

    def iterate(Z):
        # Count neighbours
        N = (Z[0:-2,0:-2] + Z[0:-2,1:-1] + Z[0:-2,2:] +
             Z[1:-1,0:-2]                + Z[1:-1,2:] +
             Z[2:  ,0:-2] + Z[2:  ,1:-1] + Z[2:  ,2:])
    
        # Apply rules
        birth = (N == 3) & (Z[1:-1,1:-1]==0)
        survive = ((N == 2) | (N == 3)) & (Z[1:-1,1:-1] == 1)
        Z[...] = 0
        Z[1:-1,1:-1][birth | survive] = 1
        return Z
    
    Z = np.random.randint(0,2,(50,50))
    for i in range(100):
        print(Z)
        Z = iterate(Z)
  • Найти n Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивС

    Z = np. arange(10000)
    np.random.shuffle(Z)
    n = 5
    
    print (Z[np.argpartition(-Z,n)[:n]])
  • ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ прямоС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ массивов (всС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом)

    def cartesian(arrays):
        arrays = [np.asarray(a) for a in arrays]
        shape = map(len, arrays)
    
        ix = np.indices(shape, dtype=int)
        ix = ix.reshape(len(arrays), -1).T
    
        for n, arr in enumerate(arrays):
            ix[:, n] = arrays[n][ix[:, n]]
    
        return ix
    
    print(cartesian(([1, 2, 3], [4, 5], [6, 7])))
  • Π”Π°Π½Ρ‹ 2 массива A (8×3) ΠΈ B (2×2). Найти строки Π² A, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат элСмСнты ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π² B, нСзависимо ΠΎΡ‚ порядка элСмСнтов Π² B

    A = np.random.randint(0,5,(8,3))
    B = np.random.randint(0,5,(2,2))
    
    C = (A[..., np.newaxis, np.newaxis] == B)
    rows = (C.sum(axis=(1,2,3)) >= B.shape[1]).nonzero()[0]
    print(rows)
  • Π”Π°Π½Π° 10×3 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, Π½Π°ΠΉΡ‚ΠΈ строки ΠΈΠ· Π½Π΅Ρ€Π°Π²Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [2,2,3])

    Z = np.random.randint(0,5,(10,3))
    E = np.logical_and.reduce(Z[:,1:] == Z[:,:-1], axis=1)
    U = Z[~E]
    print(Z)
    print(U)
  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ чисСл Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… прСдставлСний

    I = np. array([0, 1, 2, 3, 15, 16, 32, 64, 128], dtype=np.uint8)
    print(np.unpackbits(I[:, np.newaxis], axis=1))
  • Π”Π°Π½ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Найти всС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ строки

    Z = np.random.randint(0, 2, (6,3))
    T = np.ascontiguousarray(Z).view(np.dtype((np.void, Z.dtype.itemsize * Z.shape[1])))
    _, idx = np.unique(T, return_index=True)
    uZ = Z[idx]
    print(uZ)
  • Π”Π°Π½Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ A ΠΈ B, Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ einsum эквивалСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ inner, outer, sum ΠΈ mul

    # Make sure to read: http://ajcr.net/Basic-guide-to-einsum/
    
    np.einsum('i->', A)       # np.sum(A)
    np.einsum('i,i->i', A, B) # A * B
    np.einsum('i,i', A, B)    # np.inner(A, B)
    np.einsum('i,j', A, B)    # np.outer(A, B)
  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° NumPy Π² Python ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΠΏΠΈΡ‚ΠΎΠ½

    Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ дСйствия с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ NumPy Π² Python ΠŸΠΈΡ‚ΠΎΠ½.
    NumPy это ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Python, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… расчётов. NumPy позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, всС тригономСтричСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² экспонСнту ΠΈ дСйствия с Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΠ°ΠΌΠΈ. NumPy Π² ΠŸΠΈΡ‚ΠΎΠ½Β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ стандартныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ.
    Для Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ использования NumPy ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡΒ ΠΏΠΎΡΡ‚Ρ„ΠΈΠΊΡΒ as np.
    import numpy as np
    as np ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· NumPy Π² Python, ΠΏΠ΅Ρ€Π΅Π΄ названиями этих ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вмСсто numpy ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ np. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ быстрСС Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ. НапримСр, вмСсто numpy.array([1, 2]) ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ np.array([1, 2]).

    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² NumPy Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ np.array([]). Π’ ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках находится сам массив, Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках находятся элСмСнты массива.
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π—Π°Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² python
    import numpy as np
    arr = np.array([1, 2])
    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π² Python задаётся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° это Ρ‚Π°Π±Π»ΠΈΡ†Π°Β  состоящая ΠΈΠ· строк ΠΈ столбцов.Β Β Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив задаётся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π—Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹Β Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΅Π³ΠΎ элСмСнтов Π½Π° экран Π² python
    import numpy as np
    matrix = np.array([ [‘first’, ‘second’], [‘third’, ‘fourth’] ])
    print(matrix[0, 0])
    print(matrix[1, 1])
    print(matrix[0, 0]) Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ массива Π²Π½ΡƒΡ‚Ρ€ΠΈ – first. print(matrix[1, 1]) Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива – fourth.
    NumPy Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅Β ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ дСйствия с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ слоТСниС, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΈ вычислСниС опрСдСлитСля ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

    Для слоТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² PythonΒ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ числа.
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.
    import numpy as np
    matrix1 = np.array([ [3, 5, 1], [8, 7, 2] ])
    matrix2 = np.array([ [5, 3, 4], [1, 10, 9] ])
    total = matrix1 + matrix2
    print(total)
    NumPy Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅Β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².
    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слоТСния всСх элСмСнтов массива с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ индСксами. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° с суммами этих элСмСнтов являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ слоТСния.

    Β 

    Β 

    Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² Python выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ A.dot(B), Π³Π΄Π΅ A ΠΈ B это ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Для выполнСния умноТСния Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅Β Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ количСство столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A Π±Ρ‹Π»ΠΎ Ρ€Π°Π²Π½ΠΎ количСству строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ B.
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² python
    import numpy as np
    a = np.array([ [2, 1], [2, 2], [4, 3] ])
    b = np.array([ [1], [3] ])
    total = a.dot(b)
    print(total)
    Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†ΡƒΒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° число столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π²Π½ΠΎ числу строк Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π»Π° рассмотрСна ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 3Γ—2 ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€-строка Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2Γ—1. Число столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (2) Ρ€Π°Π²Π½ΠΎ числу строк Π²Π΅ΠΊΡ‚ΠΎΡ€Π° (2). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ получаСтся Π²Π΅ΠΊΡ‚ΠΎΡ€, Ρƒ ΠΊΡ‚ΠΎΡ€ΠΎΠ³ΠΎ число строк Ρ€Π°Π²Π½ΠΎ числу строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Β Python вычисляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽΒ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    np.linalg.det(A), Π³Π΄Π΅ A это квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π£ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ количСство строк Ρ€Π°Π²Π½ΠΎ количСству столбцов.
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ВычислСниС опрСдСлитСля ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² python
    import numpy as np
    a = np.array([ [2, 1], [4, 3] ])
    print(np.linalg.det(a))
    ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вычислСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΠ°Ρ‚Ρ€ΠΈΡ† с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ количСством строк ΠΈ столбцов – ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 2Γ—2 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ (2 * 3 – 1 * 4 = 2.0)

    Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅Β Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ A.dot(B), Π³Π΄Π΅ A ΠΈ B это ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ссли количСство столбцов A Ρ€Π°Π²Π½ΠΎ количСству строк B.
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² python
    import numpy as np
    a = np.array([ [2, 1, 3], [2, 2, 4] ])
    b = np.array([ [1, 1], [3, 2], [2, 4] ])
    total = a.dot(b)
    print(total)
    Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, количСство столбцов ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ количСству строк Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‚ΡΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 2Γ—3 ΠΈ 3Γ—2, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ умноТСния являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2Γ—2.

    Π’ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ np.linalg.matrix_power(A, P), Π³Π΄Π΅ A – квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, P – ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ возводится ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнныС стСпСни. Π’ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ количСство строк Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ количСству столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π’ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π² python
    import numpy as np
    a = np.array([[1, 3], [2, 1]])
    result = np.linalg.matrix_power(a, 2)
    print(result)

    Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ систСмы Π΄Π²ΡƒΡ… Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉΒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Π²Π° массива. Один массив Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ коэффициСнты для x ΠΈ y Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²Ρ‹Π΅ части ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² PythonΒ Β np.linalg.solve(ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π»Π΅Π²ΠΎΠΉ части, Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€Π°Π²ΠΎΠΉ части)
    Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Β ΡΠΈΡΡ‚Π΅ΠΌΡ‹ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Π² python
    import numpy as np
    a = np.array([[1, 2], [3, 2]])
    b = np.array([5, 6])
    result = np.linalg.solve(a, b)
    print(result)
    Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Python Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΄Π²Π° Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… уравнСния.
    1x + 2y = 5
    3x + 2y = 6

    Для вычислСния экспонСнты числа ΠΈΠ»ΠΈ массива Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° np.5], Π³Π΄Π΅ e это основаниС Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΠ°.

    Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽΒ Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‚Π΅ΠΌΠ°Β Π“Ρ€Π°Ρ„ΠΈΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ повСрхностСй Π² Python

    ПолСзно ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ массивы Π² python:
    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² python
    ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² python

    ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ:

    Β 

    Β 

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ python Π±Π΅Π· использования numpy ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅ ΠΈ максимальной суммы строк ΠΈ столбцов



    Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ Π² python

    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    

    Π½ΠΎ Π½Π΅ зная, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, я ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΏΠΎΠ½ΡΡ‚ΡŒ список, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅

    [[y+x for y in range(4)] for x in range(4)]
    

    Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅

    [[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
    

    Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ строку с максимальной суммой ΠΈ столбцы с максимальной суммой.

    Π—Π°Ρ€Π°Π½Π΅Π΅ спасибо

    python matrix
    ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Chethu Β  Β  31 августа 2016 Π² 12:57

    4 ΠΎΡ‚Π²Π΅Ρ‚Π°


    • Найти суммы строк для подмноТСства столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

      Π’ΠΎΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 10 Ρ… 12: mat <- matrix(runif(120, 0, 1), 10) Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π½Π°ΠΉΡ‚ΠΈ суммы столбцов для подмноТСств ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (Π² частности, суммы столбцов для столбцов с 1 ΠΏΠΎ 4, с 5 ΠΏΠΎ 8 ΠΈ с 9 ΠΏΠΎ 12) ΠΏΠΎ строкам. Π–Π΅Π»Π°Π΅ΠΌΡ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 10 Ρ… 3. Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈΠ· этого ΠΎΡ‚Π²Π΅Ρ‚Π° , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ…

    • Numpy располоТСниС памяти строк/столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

      Numpy nd-массивы Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Π΅ 1-d массивы. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ stack overflow ( ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚ΠΎΠ² Π² Python ΠΈΠ· массива Numpy Π² строку ΠΈΠ»ΠΈ bytearray ) ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ индСксация строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ† являСтся ‘views’ Π² исходном массивС ΠΈ Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ массива Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² памяти…



    4

    [[x * 4 + y + 1 for y in range(4)] for x in range(4)]
    

    Ρ‡Ρ‚ΠΎ эквивалСнтно:

    [[(x << 2) + y for y in range(1, 5)] for x in range(4)]
    

    Π’ΠΎΡ‚ нСбольшой ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€:

    import timeit
    
    
    def f1():
        return [[x * 4 + y + 1 for y in range(4)] for x in range(4)]
    
    
    def f2():
        return [[(x << 2) + y for y in range(1, 5)] for x in range(4)]
    
    
    def f3():
        a = range(1, 5)
        return [[(x << 2) + y for y in a] for x in range(4)]
    
    N = 5000000
    print timeit.timeit('f1()', setup='from __main__ import f1', number=N)
    print timeit.timeit('f2()', setup='from __main__ import f2', number=N)
    print timeit.timeit('f3()', setup='from __main__ import f3', number=N)
    
    # 13.683984791
    # 13.4605276559
    # 9.65608339037
    # [Finished in 36.9s]
    

    Π“Π΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° f1 & f2 Π΄Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ range(1,5) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΊΠ°ΠΊ f3

    ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ BPL Β  Β  31 августа 2016 Π² 13:00



    3

    Ѐункция range ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° start, end ΠΈ step . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ с шагом 4, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ — для создания Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков с использованиСм внСшнСго Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

    >>> [[i for i in range(i, i+4)] for i in range(1, 17, 4)]
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    

    Π²ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ с ΠΎΠ΄Π½ΠΈΠΌ range :

    >>> main_range = range(1, 5)
    >>> [[i*j + (i-1)*(4-j) for j in main_range] for i in main_range]
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    

    А Π²ΠΎΡ‚ ΠΈ Numpythonic ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

    >>> n = 4
    >>> np.split(np.arange(1, n*n + 1), np.arange(n ,n*n, n))
    [array([1, 2, 3, 4]), array([5, 6, 7, 8]), array([ 9, 10, 11, 12]), array([13, 14, 15, 16])]
    

    ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Kasravnd Β  Β  31 августа 2016 Π² 13:00



    1

    ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ это,

    In [1]: [range(1,17)[n:n+4] for n in range(0, len(range(1,17)), 4)]
    Out[1]: [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    

    ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Rahul K P Β  Β  31 августа 2016 Π² 13:08




    0

    Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстрым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ

    [([x-3,x-2,x-1,x]) for x in range(1,17) if x%4 ==0]
    

    Но Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ максимальной суммой столбцов ΠΈ строк

    ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ kunal_mehta_the_great Β  Β  31 августа 2016 Π² 13:31


    ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:


    Numpy: ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ строк ΠΈ столбцов Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

    Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ простой способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ numPy (ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ python) ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ строк ΠΈ столбцов Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹? НапримСр, Ссли я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ эту ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ: A = np.array(…


    ВсС Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ NXN Π±Π΅Π· использования numpy Π² python

    ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ NXN Π±Π΅Π· использования numpy, Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ Get diagonal Π±Π΅Π· использования numpy Π² Python ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΠΉΡ‚Π΅ ΠΊΠ°ΠΊ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚. Π’ΠΎΡ‚ ΠΌΠΎΠΉ…


    Как Π½Π°ΠΉΡ‚ΠΈ Π΄Π»ΠΈΠ½Ρƒ (ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Π Π°Π·ΠΌΠ΅Ρ€) ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ numpy Π² python?

    Для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ numpy Π² python from numpy import matrix A = matrix([[1,2],[3,4]]) Как я ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ Π΄Π»ΠΈΠ½Ρƒ строки (ΠΈΠ»ΠΈ столбца) этой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹? Аналогично, ΠΊΠ°ΠΊ я ΠΌΠΎΠ³Ρƒ ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство строк ΠΈΠ»ΠΈ столбцов?…


    Найти суммы строк для подмноТСства столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

    Π’ΠΎΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 10 Ρ… 12: mat <- matrix(runif(120, 0, 1), 10) Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π½Π°ΠΉΡ‚ΠΈ суммы столбцов для подмноТСств ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (Π² частности, суммы столбцов для столбцов с 1 ΠΏΠΎ 4, с 5 ΠΏΠΎ 8 ΠΈ с 9 ΠΏΠΎ 12) ΠΏΠΎ…


    Numpy располоТСниС памяти строк/столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

    Numpy nd-массивы Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Π΅ 1-d массивы. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ stack overflow ( ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚ΠΎΠ² Π² Python ΠΈΠ· массива Numpy Π² строку ΠΈΠ»ΠΈ bytearray ) ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ индСксация строк…


    Как Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π΅Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΠΏΠ°Ρ€Π°ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² столбцов для Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π±Π΅Π· использования Ρ†ΠΈΠΊΠ»ΠΎΠ²? (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ numpy)

    Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅, ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π΅Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²ΠΎ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ всСми Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… столбцов Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π±Π΅Π· использования Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ numpy. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚…


    numpy python — ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π½Π°Ρ€Π΅Π·Π°Π½ΠΈΠ΅ строк ΠΈ столбцов

    Π£ мСня Π΅ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° numpy с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 130 X 13. Допустим, я Ρ…ΠΎΡ‡Ρƒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ строк, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, ΠΈ подмноТСство столбцов — trainx[trainy==label,[0,6]] ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄…


    Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π±Π΅Π· использования ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² numpy ΠΈΠ»ΠΈ tensorflow?

    Π£ мСня Π΅ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, ΠΈ я Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ tf.nn.top_k, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅ значСния k для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки. Как Π±Ρ‹ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π±Π΅Π· использования…


    Numpy 1D массив: ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° строк ΠΈΠ»ΠΈ столбцов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?

    Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ я создаю массив 2 numpy. Один — 1D, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ-2D. Когда я Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΡƒΡŽ массив 1D, ΠΎΠ½ остаСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ. Он Π½Π΅ мСняСтся ΠΎΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ строк ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ столбцов. Когда я Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΡƒΡŽ массив…


    Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ суммы строк ΠΈ суммы столбцов Π² спискС списков Π² python

    Π― Ρ…ΠΎΡ‡Ρƒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ сумму строк ΠΈ сумму столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² python; ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠ·-Π·Π° Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ infosec я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ внСшниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, я использовал…

    Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² инструмСнтарии Numpy

    Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ страницы

    Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

    ЗдравствуйтС ΠΈ вновь Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° занятия ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ Β«Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Numpy Π½Π° языкС PythonΒ».

    Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ….

    Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, насколько массивы Numpy ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹: ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°Π΄ Π½ΠΈΠΌΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈΡ… слоТСниС, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° скаляр, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поэлСмСнтныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ€ΠΎΠ΄Π΅ возвСдСния Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚. А Ρ‡Ρ‚ΠΎ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ? ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Богласно Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ, Π΅Ρ‘ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ список списков. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ список списков, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

    Π˜Ρ‚Π°ΠΊ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ список Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ элСмСнты 1 ΠΈ 2, Π²Ρ‚ΠΎΡ€ΠΎΠΉ список – элСмСнты 3 ΠΈ 4. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ списки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ.

    M = np.array([ [1,2], [3,4] ])

    БчитаСтся, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс – это строка, Π²Ρ‚ΠΎΡ€ΠΎΠΉ – столбСц. Для сравнСния создадим Ρ‚Π°ΠΊΠΆΠ΅ настоящий список списков:

    L = [ [1,2], [3,4] ]

    Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, скаТСм, Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π’ спискС Python сначала индСксируСтся строка, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ список, содСрТащий 1 ΠΈ 2:

    L[0]

    Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ 1 ΠΈ 2. Нам Π½ΡƒΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠ· этого списка, поэтому

    L[0][0]

    ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 1. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массива Numpy:

    M[0][0]

    Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ 1. Но Π΅ΡΡ‚ΡŒ ΠΈ сокращённая запись, похоТая Π½Π° MATLAB, с использованиСм запятой:

    M[0,0]

    И это Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ 1. Π’Π°ΠΊ нСсколько ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Π½Π° символ мСньшС.

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Numpy Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΈ называСтся – ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°:

    M2 = np.matrix([ [1,2], [3,4] ])

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° схоТа с массивом Numpy, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ отличия. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ просто массивы Numpy; Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ докумСнтация фактичСски Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ курсС ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΎΡΡ‚Ρ€ΡΡ‚ΡŒ Π½Π° Π½ΠΈΡ… своё Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π£Π²ΠΈΠ΄Π΅Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π² массив. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    A = np.array(M2)

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Ρƒ ΠΆΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ массива. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ, Ρ…ΠΎΡ‚ΡŒ это ΠΈ массив, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ опСрациями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ транспонированиСм:

    A.T

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся транспонированная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° A.

    Π Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΠ΅ΠΌ. ΠœΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π° самом Π΄Π΅Π»Π΅ являСтся лишь Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом Numpy, Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ – ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом Numpy. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π° самом Π΄Π΅Π»Π΅ являСтся Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. ΠžΠ±ΠΎΠ±Ρ‰Π°Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ матСматичСским ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, содСрТащим числа, Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ – ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ матСматичСским ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ содСрТащим числа. Иногда встрСчаСтся прСдставлСниС Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НапримСр, Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°Ρ… ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π²Π΅ΠΊΡ‚ΠΎΡ€-столбСц размСрности 3Γ—1 ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€-строка размСрности 1Γ—3. Π’Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² Numpy, Π½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄Π²ΡƒΡ… размСрностСй Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΡ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС просто ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ лишь Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ – ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ

    Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ массивов Π΄Π°Π½Π½Ρ‹Ρ….

    Иногда Π½ΡƒΠΆΠ½Ρ‹ нСсколько массивов просто Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ – ΠΊΠ°ΠΊ Π² этом курсС. Один ΠΈΠ· способов Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° я воспользовался массивом Numpy для создания списка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

    np.array([1,2,3])

    Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ приходится Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт. А Ссли Π½ΡƒΠΆΠ΅Π½ массив с сотнСй элСмСнтов? А Ссли Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ содСрТал случайныС числа? ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π΄Π°Π½Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ массивы.

    ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго я ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив, состоящих ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ zeros с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π΄Π»ΠΈΠ½Ρ‹:

    Z = np.zeros(10)

    Π­Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ с 10 элСмСнтами, состоящий ΠΈΠ· Π½ΡƒΠ»Π΅ΠΉ. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ размСрности 10Γ—10, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ:

    Z = np.zeros((10, 10))

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 100 Π½ΡƒΠ»Π΅ΠΉ Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ размСрности 10Γ—10. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ функция ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ лишь ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ – ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, содСрТащий ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. Π•ΡΡ‚ΡŒ эквивалСнтная функция, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ массив ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ†. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ,

    O = np.ones((10, 10))

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° размСрности 10Γ—10, состоящая ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ†.

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ряд случайных числСн. Для этого ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ np.random.random. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, массив случайных чисСл размСрности 10Γ—10:

    R = np.random.random((10,10))

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΡΡ Π½Π°Π±ΠΎΡ€ случайных чисСл Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ 10Γ—10. БросаСтся Π² Π³Π»Π°Π·Π°, Ρ‡Ρ‚ΠΎ всС числа большС 0 ΠΈ мСньшС 1. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ случайных числах, имССтся Π² Π²ΠΈΠ΄Ρƒ распрСдСлСниС вСроятностСй, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ случайныС числа. Данная конкрСтная функция случайных чисСл Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлённыС числа ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1. А Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ числа с гауссовым распрСдСлСниСм? Π’ Numpy Π΅ΡΡ‚ΡŒ функция ΠΈ для этого. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ. НазываСтся ΠΎΠ½Π° random.randn. Π’Π½ΠΎΠ²ΡŒ-Ρ‚Π°ΠΊΠΈ, Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ 10Γ—10:

    G = np.random.randn((10Γ—10))

    И Ρƒ нас Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ – Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹Π΅ числа. Π‘Π°ΠΌΠ° функция ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°, Π½ΠΎ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π½ΠΈ странно, функция randn Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Numpy воспринимаСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠΈΠ΅ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ randn! – ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

    G = np.random.randn(10,10)

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠœΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ числа с гауссовым распрСдСлСниСм, срСдним Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0 ΠΈ диспСрсиСй 1. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Numpy Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для вычислСния этих статистичСских Π²Π΅Π»ΠΈΡ‡ΠΈΠ½. Π’Π°ΠΊ, ΠΊΠΎΠΌΠ°Π½Π΄Π°

    G.mean()

    Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°

    G.var()

    позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΈΡΠΏΠ΅Ρ€ΡΠΈΡŽ.

    Как Π²ΠΈΠ΄ΠΈΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ числа вСсьма Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ истинным значСниям.

    ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

    Π§Ρ‚ΠΎ интСрСсно Π² произвСдСниях ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, – Ρ‚Π°ΠΊ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ называСтся ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅: Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ размСрности Π΄Π²ΡƒΡ… ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ. Π’Π°ΠΊ, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° A размСрности 2Γ—3 ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° B размСрности 3Γ—3, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ A Π½Π° B, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ внутрСнняя Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° 3. Однако ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ B Π½Π° A, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ внутрСнняя Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π»Π΅Π²ΠΎΠ³ΠΎ мноТитСля Ρ€Π°Π²Π½Π° 3, Π° внутрСнняя Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Ρ€Π°Π²Π½Π° 2.

    Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: для Ρ‡Π΅Π³ΠΎ сущСствуСт Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†? Рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

    Π’ΠΎ Π΅ΡΡ‚ΡŒ ij-ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ C Ρ€Π°Π²Π΅Π½ суммС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ всСх ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов ΠΈΠ· i-ΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A ΠΈ j-Π³ΠΎ столбца ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ B. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ij-ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ C Ρ€Π°Π²Π΅Π½ скалярному ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ i-ΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A ΠΈ j-Π³ΠΎ столбца ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ B. Π’ связи с этим ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция dot Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Numpy:

    C = A.dot(B)

    Π­Ρ‚ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

    Как Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Ρ‚Π°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ часто встрСчаСтся опСрация поэлСмСнтного умноТСния. Π’ случаС Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° (*). Как ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Π² случаС Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ поэлСмСнтноС ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΈ Π² случаС ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΎΠ±Π° массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² точности ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, вСдь Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ настоящСС ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Но Π½ΡƒΠΆΠ½ΠΎ просто Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Numpy Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ поэлСмСнтноС ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° функция dot – ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Π’Π°ΠΊΠΆΠ΅ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ записи матСматичСских ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚ Π΄Π°ΠΆΠ΅ Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ символа для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поэлСмСнтного умноТСния. Π’Π°ΠΊ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΡ€ΡƒΠΆΠΊΠΎΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ – ΠΊΡ€ΡƒΠΆΠΊΠΎΠΌ с крСстиком Π²Π½ΡƒΡ‚Ρ€ΠΈ. ΠŸΠΎΡ…ΠΎΠΆΠ΅, Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ просто Π½Π΅ сущСствуСт стандартной записи для Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, хотя ΠΎΠ½Π° часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ Π² связи с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹.

    Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ

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

    Начнём с нахоТдСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π’Π½Π°Ρ‡Π°Π»Π΅ создадим ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ:

    A = np.array([[1,2],[3,4]])

    Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ inv модуля linalg:

    Ainv = np.linalg.inv(A)

    ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΡƒΠΌΠ½ΠΎΠΆΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ A, Π½Π° саму А:

    Ainv.dot(A)

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. МоТСм ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΡƒΠΌΠ½ΠΎΠΆΠΈΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ А Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π΅ΠΉ:

    A.dot(Ainv)

    И Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ – Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ опрСдСлитСля ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    np.linalg.det(A)

    Как ΠΈ оТидалось, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ -2.

    Иногда Π½ΡƒΠΆΠ½Π° диагональ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°

    np.diag(A)

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

    np.diag([1,2])

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ 1 ΠΈ 2 Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты – Π½ΡƒΠ»ΠΈ.

    Π­Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ: Ссли ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ diag, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов; Ссли ΠΆΠ΅ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Ρ‚ΠΎ получится Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС Π²Π½Π΅Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, Π° ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ массив располагаСтся Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

    Π‘Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ внСшнСС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’ частности, внСшнСС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ вычисляСм ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΡŽ ряда Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²-ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ². ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с поэлСмСнтным ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ°, ΠΈ скалярным ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция dot. Напомню, Ρ‡Ρ‚ΠΎ скалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ называСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ.

    Π˜Ρ‚Π°ΠΊ, создадим Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π°:

    a = np.array([1,2])

    b = np.array([3,4])

    Π’Π½Π΅ΡˆΠ½Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ вычисляСтся ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅

    np.outer(a, b)

    ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    np.inner(a, b)

    Π­Ρ‚ΠΎ даст Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    a.dot(b)

    Каким ΠΈΠ· этих способов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ – сугубо Π½Π° вашС усмотрСниС.

    Другая распространённая опСрация – Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ слСда ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ сумма элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, располоТСнных Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ свСдСния:

    np.dialog(A).sum()

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ 5. Но Π² Numpy для этого Π΅ΡΡ‚ΡŒ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ функция:

    np.trace(A)

    И ΠΌΡ‹ ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 5.

    И послСднСС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ обсудим, – это собствСнныС значСния ΠΈ собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹. Если Π²Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ ΠΈΡ… Π² курсС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, Ρ‚ΠΎ, вСроятно, Π²Π°ΠΌ слСдуСт ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ свои знания ΠΏΠΎ этому ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρƒ. Но сСйчас я просто ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ всё это дСлаСтся Π² ΠΊΠΎΠ΄Π΅, поэтому Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ собствСнныС значСния ΠΈ собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, просто пропуститС эту Ρ‡Π°ΡΡ‚ΡŒ.

    Часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ собствСнныС значСния ΠΈ собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ симмСтричной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ковариационная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ размСрности 100Γ—3 с гауссовым распрСдСлСниСм:

    X = np.random.randn(100,3)

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: считаСтся, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – это строка, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ – это столбСц, поэтому для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹ΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρƒ нас имССтся 100 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ 3 ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°. РазумССтся, Π² Numpy ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ функция для вычислСния ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ. ΠžΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‘:

    cov = np.cov(X)

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ всё ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

    cov.shape

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° 100Γ—100. Π­Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 3Γ—3, вСдь наши Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ 3. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Ρ‘ Ρ€Π°Π·, транспонировав X:

    cov = np.cov(X.T)

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ 3Γ—3. НуТно ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ вычислСнии ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Ρ‘ сначала Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

    Для вычислСния собствСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ собствСнных Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – eig ΠΈ eigh. Eigh ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для симмСтричных ΠΈ эрмитовых ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Если Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Π°Π»Π³Π΅Π±Ρ€Ρƒ комплСксных чисСл, Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ эрмитова ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ называСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, которая, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ транспонированной, остаётся Ρ€Π°Π²Π½ΠΎΠΉ сама сСбС:

    Π’ΠΎ Π΅ΡΡ‚ΡŒ ij-ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ C Ρ€Π°Π²Π΅Π½ суммС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ всСх ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов ΠΈΠ· i-ΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A ΠΈ j-Π³ΠΎ столбца ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ B. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ij-ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ C Ρ€Π°Π²Π΅Π½ скалярному ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ i-ΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A ΠΈ j-Π³ΠΎ столбца ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ B. Π’ связи с этим ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция dot Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Numpy:

    C = A.dot(B)

    Π­Ρ‚ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

    Как Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Ρ‚Π°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ часто встрСчаСтся опСрация поэлСмСнтного умноТСния. Π’ случаС Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° (*). Как ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Π² случаС Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ поэлСмСнтноС ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΈ Π² случаС ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΎΠ±Π° массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² точности ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, вСдь Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ настоящСС ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Но Π½ΡƒΠΆΠ½ΠΎ просто Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Numpy Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ поэлСмСнтноС ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° функция dot – ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Π’Π°ΠΊΠΆΠ΅ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ записи матСматичСских ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚ Π΄Π°ΠΆΠ΅ Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ символа для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поэлСмСнтного умноТСния. Π’Π°ΠΊ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΡ€ΡƒΠΆΠΊΠΎΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ – ΠΊΡ€ΡƒΠΆΠΊΠΎΠΌ с крСстиком Π²Π½ΡƒΡ‚Ρ€ΠΈ. ΠŸΠΎΡ…ΠΎΠΆΠ΅, Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ просто Π½Π΅ сущСствуСт стандартной записи для Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, хотя ΠΎΠ½Π° часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ Π² связи с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹.

    Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ

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

    Начнём с нахоТдСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π’Π½Π°Ρ‡Π°Π»Π΅ создадим ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ:

    A = np.array([[1,2],[3,4]])

    Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ inv модуля linalg:

    Ainv = np.linalg.inv(A)

    ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΡƒΠΌΠ½ΠΎΠΆΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ A, Π½Π° саму А:

    Ainv.dot(A)

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ. МоТСм ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΡƒΠΌΠ½ΠΎΠΆΠΈΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ А Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π΅ΠΉ:

    A.dot(Ainv)

    И Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ – Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ опрСдСлитСля ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    np.linalg.det(A)

    Как ΠΈ оТидалось, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ -2.

    Иногда Π½ΡƒΠΆΠ½Π° диагональ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°

    np.diag(A)

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

    np.diag([1,2])

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ 1 ΠΈ 2 Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты – Π½ΡƒΠ»ΠΈ.

    Π­Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ: Ссли ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ diag, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов; Ссли ΠΆΠ΅ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Ρ‚ΠΎ получится Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС Π²Π½Π΅Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, Π° ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ массив располагаСтся Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

    Π‘Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ внСшнСС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’ частности, внСшнСС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ вычисляСм ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΡŽ ряда Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²-ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ². ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с поэлСмСнтным ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ°, ΠΈ скалярным ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция dot. Напомню, Ρ‡Ρ‚ΠΎ скалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ называСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ.

    Π˜Ρ‚Π°ΠΊ, создадим Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π°:

    a = np.array([1,2])

    b = np.array([3,4])

    Π’Π½Π΅ΡˆΠ½Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ вычисляСтся ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅

    np.outer(a, b)

    ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    np.inner(a, b)

    Π­Ρ‚ΠΎ даст Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

    a.dot(b)

    Каким ΠΈΠ· этих способов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ – сугубо Π½Π° вашС усмотрСниС.

    Другая распространённая опСрация – Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ слСда ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ сумма элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, располоТСнных Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ свСдСния:

    np.dialog(A).sum()

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ 5. Но Π² Numpy для этого Π΅ΡΡ‚ΡŒ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ функция:

    np.trace(A)

    И ΠΌΡ‹ ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 5.

    И послСднСС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ обсудим, – это собствСнныС значСния ΠΈ собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹. Если Π²Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ ΠΈΡ… Π² курсС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, Ρ‚ΠΎ, вСроятно, Π²Π°ΠΌ слСдуСт ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ свои знания ΠΏΠΎ этому ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρƒ. Но сСйчас я просто ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ всё это дСлаСтся Π² ΠΊΠΎΠ΄Π΅, поэтому Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ собствСнныС значСния ΠΈ собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, просто пропуститС эту Ρ‡Π°ΡΡ‚ΡŒ.

    Часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ собствСнныС значСния ΠΈ собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ симмСтричной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ковариационная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ размСрности 100Γ—3 с гауссовым распрСдСлСниСм:

    X = np.random.randn(100,3)

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: считаСтся, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – это строка, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ – это столбСц, поэтому для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹ΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρƒ нас имССтся 100 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ 3 ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°. РазумССтся, Π² Numpy ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ функция для вычислСния ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ. ΠžΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‘:

    cov = np.cov(X)

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ всё ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

    cov.shape

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° 100Γ—100. Π­Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 3Γ—3, вСдь наши Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ 3. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Ρ‘ Ρ€Π°Π·, транспонировав X:

    cov = np.cov(X.T)

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ 3Γ—3. НуТно ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ вычислСнии ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Ρ‘ сначала Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

    Для вычислСния собствСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ собствСнных Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – eig ΠΈ eigh. Eigh ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для симмСтричных ΠΈ эрмитовых ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Если Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Π°Π»Π³Π΅Π±Ρ€Ρƒ комплСксных чисСл, Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ эрмитова ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ называСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, которая, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ транспонированной, остаётся Ρ€Π°Π²Π½ΠΎΠΉ сама сСбС:

    Π­Ρ€ΠΌΠΈΡ‚ΠΎΠ²Π° ΠΆΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° – это ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, которая остаётся Ρ€Π°Π²Π½ΠΎΠΉ сама сСбС, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ сопряТённой:

    Как извСстно, ковариационная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° являСтся симмСтричной, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ eigh. Π•Ρ‘ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ:

    np.linalg.eigh(cov)

    Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ содСрТит Ρ‚Ρ€ΠΈ собствСнных значСния, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ – собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, прСдставлСнныС Π² столбцах. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ eig:

    np.linalg.eig(cov)

    ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ обычная функция eig Ρ…ΠΎΡ‚ΡŒ ΠΈ Π΄Π°Ρ‘Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ собствСнныС значСния ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ собствСнныС Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ порядкС. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС порядок Ρ‚ΠΎΡ‚ ΠΆΠ΅, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

    На этом лСкция заканчиваСтся. Она довольно короткая, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±Ρ‹Π»Π° создана для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌ с матСматичСским Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠΌ, Π½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Numpy.

    РСшСниС систСмы Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ

    Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΡ‹ рассмотрим послСднюю ΠΈΠ· самых распространённых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ – Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ систСмы Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ.

    Напомню, Ρ‡Ρ‚ΠΎ систСма Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄

    Π³Π΄Π΅ A – ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, x – Π²Π΅ΠΊΡ‚ΠΎΡ€-столбСц искомых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, b – Π²Π΅ΠΊΡ‚ΠΎΡ€ чисСл. РСшСниС, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, состоит Π² ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΠΎΠΈΡ… частСй ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ A:

    Π­Ρ‚ΠΎ коррСктная опСрация, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ прСдполагаСтся, Ρ‡Ρ‚ΠΎ A являСтся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠ°. Π’ΠΎΠ³Π΄Π° x ΠΈΠΌΠ΅Π΅Ρ‚ СдинствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ x Ρ€Π°Π²Π½Π° D, Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ D ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ с D нСизвСстными.

    Π’ΡƒΡ‚ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… слоТностСй, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ вСсь инструмСнтарий, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° вычислСний. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ находится обратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ эти Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ Π½Π°ΠΌ ΠΈ Π½ΡƒΠΆΠ½Ρ‹.

    РСшим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. A Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ

    Π­Ρ‚ΠΎ коррСктная опСрация, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ прСдполагаСтся, Ρ‡Ρ‚ΠΎ A являСтся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠ°. Π’ΠΎΠ³Π΄Π° x ΠΈΠΌΠ΅Π΅Ρ‚ СдинствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ x Ρ€Π°Π²Π½Π° D, Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ D ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ с D нСизвСстными.

    Π’ΡƒΡ‚ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… слоТностСй, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ вСсь инструмСнтарий, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° вычислСний. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ находится обратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ эти Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ Π½Π°ΠΌ ΠΈ Π½ΡƒΠΆΠ½Ρ‹.

    РСшим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. A Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ

    b Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ [1, 2]:

    b = np.array([1, 2])

    РСшСниСм Π±ΡƒΠ΄Π΅Ρ‚

    x = np.linalg.inv(A).dot(b)

    Π˜Ρ‚Π°ΠΊ, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ числа 0 ΠΈ 0,5. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

    ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π²Π²ΠΈΠ΄Ρƒ ΠΎΡ‡Π΅Π½ΡŒ частого провСдСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° вычислСний, Π΅ΡΡ‚ΡŒ способ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅ – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ solve. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

    x = np.linalg.solve(A, b)

    И ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‚.

    Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ писали ΠΊΠΎΠ΄ Π² MATLAB, Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ inv MATLAB Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ сообщаСт, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивный способ вычислСний. Π’ MATLAB ΠΎΠ½ называСтся Π½Π΅ solve, Π½ΠΎ ΠΏΠΎ сути это Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΈ ΠΎΠ½ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ эффСктивСн ΠΈ Ρ‚ΠΎΡ‡Π΅Π½. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Ρƒ вас ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ inv. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ solve.

    ВСкстовая Π·Π°Π΄Π°Ρ‡Π°

    Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ нСслоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ solve.

    Π˜Ρ‚Π°ΠΊ, поставим Π·Π°Π΄Π°Ρ‡Ρƒ. На нСбольшой ярмаркС входная ΠΏΠ»Π°Ρ‚Π° составляСт 1,5 Π΄ΠΎΠ»Π»Π°Ρ€Π° для Ρ€Π΅Π±Ρ‘Π½ΠΊΠ° ΠΈ 4 Π΄ΠΎΠ»Π»Π°Ρ€Π° для взрослого. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π·Π° дСнь ярмарку посСтило 2200 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ; ΠΏΡ€ΠΈ этом Π±Ρ‹Π»ΠΎ собрано 5050 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ‹. Бколько Π΄Π΅Ρ‚Π΅ΠΉ ΠΈ сколько взрослых посСтили ярмарку Π² этот дСнь?

    Π˜Ρ‚Π°ΠΊ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ количСство Π΄Π΅Ρ‚Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· X1, Π° количСство взрослых – Ρ‡Π΅Ρ€Π΅Π· X2. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ

    ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ

    ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, Π³Π΄Π΅ A Ρ€Π°Π²Π½ΠΎ:

    Β Π° b Ρ€Π°Π²Π½ΠΎ :

    Β Π° b Ρ€Π°Π²Π½ΠΎ :

    ΠŸΠΎΠ΄ΡΡ‚Π°Π²ΠΈΠΌ эти значСния Π² Numpy ΠΈ Π½Π°ΠΉΠ΄Ρ‘ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

    A = np.array([[1,1], [1.5,4]])

    b = np.array([2200, 5050])

    np.linalg.solve(A, b)

    ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚: 1500 Π΄Π΅Ρ‚Π΅ΠΉ ΠΈ 700 взрослых. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ это ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚.

    Копии ΠΈ прСдставлСния массивов | NumPy

    Π’Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ с массивом, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΠΎ ΠΏΡ€ΠΈ этом с исходным массивом Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ происходит. НапримСр:

    >>> a = np.arange(18).reshape(3, 6)
    >>> a
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11],
           [12, 13, 14, 15, 16, 17]])
    >>>
    >>> a.T
    array([[ 0,  6, 12],
           [ 1,  7, 13],
           [ 2,  8, 14],
           [ 3,  9, 15],
           [ 4, 10, 16],
           [ 5, 11, 17]])
    >>>
    >>> a    #  Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ массив Π½Π΅ измСнился
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11],
           [12, 13, 14, 15, 16, 17]])

    Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² NumPy сущСствуСт Π΄Π²Π° понятия: копия массива ΠΈ прСдставлСниС массива. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

    >>> a = np.arange(18).reshape(3, 6)
    >>>
    >>> b = a
    >>> c = a.T
    >>>
    >>> #  МоТно ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ b ΠΈ c - это 
    ... #  Π΄Ρ€ΡƒΠ³ΠΈΠ΅ массивы, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ
    ... 
    >>> a[0][0] = 777777
    >>> a
    array([[777777,      1,      2,      3,      4,      5],
           [     6,      7,      8,      9,     10,     11],
           [    12,     13,     14,     15,     16,     17]])
    >>> 
    >>> b
    array([[777777,      1,      2,      3,      4,      5],
           [     6,      7,      8,      9,     10,     11],
           [    12,     13,     14,     15,     16,     17]])
    >>>
    >>> c
    array([[777777,      6,     12],
           [     1,      7,     13],
           [     2,      8,     14],
           [     3,      9,     15],
           [     4,     10,     16],
           [     5,     11,     17]])

    Π’ΠΎΡ‚ здСсь Ρƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ: ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°, Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ошибки. Π₯отя всС довольно просто. Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ присваиваниС b = a, Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ копирования Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ находится ΠΎΠ΄ΠΈΠ½ массив, Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ a ΠΈ b Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти. ИмСнно поэтому ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ указатСлям ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅.

    Π₯ΠΎΡ€ΠΎΡˆΠΎ, a ΠΈ b — это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Как Π±Ρ‹Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с? По сути это Ρ‚ΠΎΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° Ρ‚ΡƒΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ a ΠΈ b, Π½ΠΎ прСдставлСны эти Π΄Π°Π½Π½Ρ‹Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² NumPy ΠΈ сущСствуСт понятиС — прСдставлСниС массива. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСны Π² Ρ€Π°Π·Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅:

    >>> a = np.arange(18).reshape(3, 6)
    >>> b = a.reshape(2, 9)
    >>> c = a.reshape(2, 3, 3)
    >>>
    >>> a
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11],
           [12, 13, 14, 15, 16, 17]])
    >>>
    >>> b
    array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8],
           [ 9, 10, 11, 12, 13, 14, 15, 16, 17]])
    >>>
    >>> c
    array([[[ 0,  1,  2],
            [ 3,  4,  5],
            [ 6,  7,  8]],
    
           [[ 9, 10, 11],
            [12, 13, 14],
            [15, 16, 17]]])
    >>> 
    >>> #  Но Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ элСмСнт Ρ‡Π΅Ρ€Π΅Π· Π°
    ... #  Ρ‚ΠΎ это отразится Π²ΠΎ всСх прСдставлСниях
    ...
    >>> a[0][0] = 7777777
    >>>
    >>> b
    array([[7777777,       1,       2,       3,       4,       5,       6,
                  7,       8],
           [      9,      10,      11,      12,      13,      14,      15,
                 16,      17]])
    >>>
    >>> c
    array([[[7777777,       1,       2],
            [      3,       4,       5],
            [      6,       7,       8]],
    
           [[      9,      10,      11],
            [     12,      13,      14],
            [     15,      16,      17]]])
    >>> 

    Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°Π· всС прСдставлСния ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΎΠ΄Π½ΠΎΠΌ прСдставлСнии отразится Π½Π° всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… прСдставлСниях ΠΈ Π΄Π°ΠΆΠ΅ указатСлях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ‚Π΅ ΠΆΠ΅ самыС Π΄Π°Π½Π½Ρ‹Π΅:

    >>> b[0][0] = 1111111
    >>> c[0][1][0] = 222222
    >>>
    >>> b
    array([[1111111,       1,       2,  222222,       4,       5,       6,
                  7,       8],
           [      9,      10,      11,      12,      13,      14,      15,
                 16,      17]])
    >>>
    >>> c
    array([[[1111111,       1,       2],
            [ 222222,       4,       5],
            [      6,       7,       8]],
    
           [[      9,      10,      11],
            [     12,      13,      14],
            [     15,      16,      17]]])
    >>>
    >>> a
    array([[1111111,       1,       2,  222222,       4,       5],
           [      6,       7,       8,       9,      10,      11],
           [     12,      13,      14,      15,      16,      17]])

    ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти физичСски ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто. И ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, простоС присваиваниС Π½Π΅ выполняСт Ρ‚Π°ΠΊΠΎΠ³ΠΎ копирования. Π•Ρ‰Π΅ ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ прСдставлСния. Но ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π° Π΅Ρ‰Π΅ сохраняСтся, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ?

    Всё Ρ€Π°Π²Π½ΠΎ нСпонятно, ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ говоря ΠΎ ΠΊΠΎΠ΄Π΅ NumPy? И Π²ΠΎΠΎΠ±Ρ‰Π΅, сущСствуСт Π»ΠΈ Π² самом NumPy какая-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π° этот случай? Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠΌ всС это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….


    10.1. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ массивы Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ

    ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ присваиваниС Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ массива — это ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎ Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. Π”Π°, ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ это каТСтся странной ΠΏΡ€ΠΈΡ…ΠΎΡ‚ΡŒΡŽ создатСлСй NumPy (ΠΈΠ»ΠΈ самого Python), Π½ΠΎ Ссли Π±Ρ‹ это Π±Ρ‹Π»ΠΎ Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π»ΠΈΠ±ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎΠ± использовании памяти. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ отсутствиС автоматичСского копирования ΠΏΡ€ΠΈ присваивании — нСбольшая ΠΏΠ»Π°Ρ‚Π° Π·Π° простоту ΠΈ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ Python.

    >>> #  Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим массив с ΠΈΠΌΠ΅Π½Π΅ΠΌ "a"
    ... 
    >>> a = np.arange(12)
    >>> #  Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: 'Π£ нас Π΅ΡΡ‚ΡŒ массив "Π°"!'
    ... 
    >>> a
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    >>>
    >>> #  Π’Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм копию массива "Π°"
    ... 
    >>> b = a
    >>> #  Казалось Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ρƒ нас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ 2 массива
    ... 
    >>> a
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    >>> b
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    >>> 
    >>> b is a    #  Однако массив "b" это массив "a"
    True
    >>> #  Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ это ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:
    ... 
    >>> id(a)
    2968935744
    >>> id(b)
    2968935744
    >>>
    >>> id(a) == id(b)
    True

    Π‘Π°ΠΌΠΎΠ΅ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ массивы a ΠΈ b это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ просто ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

    >>> a.dtype    #  Π’ΠΈΠΏ элСмСнтов массива "Π°"
    dtype('int32')
    >>> b.dtype    #  Π’ΠΈΠΏ элСмСнтов массива "b"
    dtype('int32')
    >>>
    >>> a.dtype = np.float64    #  МСняСм Ρ‚ΠΈΠΏ элСмСнтов массива "Π°"
    >>> a.dtype
    dtype('float64')
    >>> b.dtype    #  Π’ΠΈΠΏ элСмСнтов массива "b" Ρ‚Π°ΠΊ ΠΆΠ΅ мСняСтся
    dtype('float64')

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


    10.2. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов

    Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ копию массива ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ copy позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ массива Π½ΠΎ ΠΈ всС Π΅Π³ΠΎ свойства.

    >>> a = np.arange(12).reshape(2,6)
    >>> a
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11]])
    >>>
    >>> b = a.copy()
    >>> b
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11]])
    >>>
    >>> b == a    #  ВсС элСмСнты массивов Ρ€Π°Π²Π½Ρ‹
    array([[ True,  True,  True,  True,  True,  True],
           [ True,  True,  True,  True,  True,  True]], dtype=bool)
    >>>
    >>> b is a     #  Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ это ΡƒΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
    False
    >>>
    >>> # Π’Π΅ΠΏΠ΅Ρ€ΡŒ, это Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π°ΠΆΠ΅ Π² памяти
    ...
    >>> id(a)
    2968935824
    >>> id(b)
    2968935624
    >>>
    >>> id(a) == id(b)
    False
    >>>
    >>> a[0][0] = 7777777    #  ИзмСнСния Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π΅ отразятся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ
    >>> a
    array([[7777777,       1,       2,       3,       4,       5],
           [      6,       7,       8,       9,      10,      11]])
    >>> b
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11]])
    >>>
    >>> a.dtype
    dtype('int32')
    >>> b.dtype    #  Массив "b" скопировал Π΄Π°ΠΆΠ΅ Ρ‚ΠΈΠΏ элСмСнтов
    dtype('int32')
    >>> a.dtype = np.int16    #  ИзмСним Ρ‚ΠΈΠΏ элСмСнтов массива "Π°"
    >>> a.dtype
    dtype('int16')
    >>> b.dtype     #  Π’ΠΈΠΏ элСмСнтов массива "b" Π½Π΅ мСняСтся
    dtype('int32')

    Π’ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ массивах a ΠΈ b, Ρ‚ΠΎ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… копиях: Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ это Π½Π΅ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΈΠ»ΠΈ ΡΠ»Ρ‹ΡˆΠΈΠΌ, Ρ‡Ρ‚ΠΎ массив b — это копия массива a, Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ это ΠΈ подразумСваСтся Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ NumPy.


    10.3. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡ массивов

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ простоС присваиваниС Π½Π΅ выполняСт копирования массивов. Если Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° копия, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° copy. Однако, Π±Ρ‹Π²Π°ΡŽΡ‚ случаи ΠΊΠΎΠ³Π΄Π° копия массива Π½Π΅ Π½ΡƒΠΆΠ½Π°, Π° Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый массив Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ — Π΄Ρ€ΡƒΠ³ΠΎΠ΅ прСдставлСниС исходного массива.

    Для Ρ‚Π°ΠΊΠΈΡ… Π½ΡƒΠΆΠ΄ NumPy прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ ndarray.view(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просматриваСт Π΄Π°Π½Π½Ρ‹Π΅ исходного массива, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива Π½Π΅ ΠΏΠΎΠ²Π»Π΅Ρ‡Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

    >>> a = np.arange(12)
    >>> a
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    >>>
    >>> b = a
    >>> b
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    >>>
    >>> a.shape = 3, 4     #  МСняСм Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива "Π°"
    >>> a
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>>
    >>> b    #  Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива "b" Ρ‚Π°ΠΊ ΠΆΠ΅ измСнились
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>>
    >>> #  Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим прСдставлСниС массива "Π°"
    ... 
    >>> c = a.view()
    >>> c
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>>
    >>> a.shape = 2, 6    #  ИзмСним Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива "Π°"
    >>> a
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11]])
    >>>
    >>> c    #  Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива "с" Π½Π΅ измСнились
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>>
    >>> #  Но массив "с" просматриваСт Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Ρ‚ΠΎ ΠΈ "Π°"
    ... #  ИзмСнСниС элСмСнтов Π² "Π°" отразится Π½Π° массивС "с"
    ...
    >>> a[0][0] = 11111
    >>> c
    array([[11111,     1,     2,     3],
           [    4,     5,     6,     7],
           [    8,     9,    10,    11]])
    >>> #  А ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ элСмСнтов Π² "с" отразится Π½Π° массивС "Π°"
    >>> c[0][0] = 77777
    >>> a
    array([[77777,     1,     2,     3,     4,     5],
           [    6,     7,     8,     9,    10,    11]])

    Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ порядок элСмСнтов Π² массивах Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ прСдставлСниС, Π° Π½Π΅ копию массива:

    >>> a = np.arange(8)
    >>> b = a.reshape(2,4)    #  Массив "b" - это прСдставлСниС массива "Π°"
    >>> c = b.T    #  А Π²ΠΎΡ‚ массив "с" - это прСдставлСниС массива "b"
    >>>
    >>> a
    array([0, 1, 2, 3, 4, 5, 6, 7])
    >>> b
    array([[0, 1, 2, 3],
           [4, 5, 6, 7]])
    >>> c
    array([[0, 4],
           [1, 5],
           [2, 6],
           [3, 7]])
    >>> 
    >>> #  ВсС Ρ‚Ρ€ΠΈ массива ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅
    ... 
    >>> c[0][0] = 77777
    >>>
    >>> c
    array([[77777,     4],
           [    1,     5],
           [    2,     6],
           [    3,     7]])
    >>> b
    array([[77777,     1,     2,     3],
           [    4,     5,     6,     7]])
    >>> a
    array([77777,     1,     2,     3,     4,     5,     6,     7])

    Π‘Ρ€Π΅Π·Ρ‹ массивов — это Ρ‚ΠΎΠΆΠ΅ прСдставлСния массивов:

    >>> a = np.arange(12)
    >>> a
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    >>>
    >>> b = a[0:12:2]
    >>> b
    array([ 0,  2,  4,  6,  8, 10])
    >>>
    >>> c = a[1:12:2]
    >>> c
    array([ 1,  3,  5,  7,  9, 11])
    >>> 
    >>> #  ВсС Ρ‚Ρ€ΠΈ массива ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅
    ... 
    >>> b[:] = 0
    >>>
    >>> b
    array([0, 0, 0, 0, 0, 0])
    >>> a
    array([ 0,  1,  0,  3,  0,  5,  0,  7,  0,  9,  0, 11])
    >>>
    >>> c[:] = -1
    >>> c
    array([-1, -1, -1, -1, -1, -1])
    >>>
    >>> a
    array([ 0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1])

    Если ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ массив b — это прСдставлСниС массива a, Ρ‚ΠΎ подразумСваСтся, Ρ‡Ρ‚ΠΎ нСзависимо ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π²ΠΈΠ΄Π° массива b ΠΎΠ½ состоит ΠΈΠ· Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти, Ρ‡Ρ‚ΠΎ ΠΈ массив a. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ²Π»Π΅Ρ‡Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

    Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹

    Π”Π°Ρ‚Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Jul 22, 2019

    Π’ случаС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ классификации, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ классификации, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ошибок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для суммирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° классификации.

    Ρ„ΠΎΡ‚ΠΎΠ”ΠΆΠΎΡˆΡƒΠ° Π‘ΠΎΡ€Ρ‚ΠΈΠ½ΠΎΠ½Π°Unsplash

    ВычислСниС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ модСль классификации Π²Π΅Ρ€Π½Π° ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ошибки ΠΎΠ½Π° допускаСт.

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

    Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° ​​на:
    1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π°?
    2. Как Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ для двухклассовой Π·Π°Π΄Π°Ρ‡ΠΈ классификации Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ кошки-собаки.
    3. Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ Π² Python & R.
    4. ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ интуиция ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ€Π°Ρ…: Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΎΡ‚Π·Ρ‹Π², Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ спСцифика

    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ прСдоставляСт сводку ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Π·Π°Π΄Π°Ρ‡Π΅ классификации. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Ρ‹ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ со своими значСниями ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ классу.

    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ для Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ классификации

    ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ точности Π² классификации, ΠΊΠΎΠ³Π΄Π° классы Π½Π΅ сбалансированы. НапримСр, Ρƒ нас Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· 100 ΠΏΠ°Ρ†ΠΈΠ΅Π½Ρ‚ΠΎΠ², 5 ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ Π΄ΠΈΠ°Π±Π΅Ρ‚, Π° 95 Π·Π΄ΠΎΡ€ΠΎΠ²Ρ‹. Однако, Ссли наша модСль Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдсказываСт класс Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всС 100 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π·Π΄ΠΎΡ€ΠΎΠ²Ρ‹, Π΄Π°ΠΆΠ΅ Ссли Ρƒ нас Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ классификации составляСт 95%. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹.

    Π”Π°Π²Π°ΠΉΡ‚Π΅ возьмСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    Π£ нас всСго 10 кошСк ΠΈ собак, ΠΈ наша модСль прСдсказываСт, кошка это ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

    ЀактичСскиС значСния = [«собака», «кошка», «собака», «кошка», «собака», «собака», «кошка», «собака», «кошка», «собака» Β»]
    ΠŸΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ значСния = [«собака», «собака», «собака», «собака», «собака», «собака», «кошка», «кошка», «кошка», «кошка»]

    ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΌΡ‹ описываСм ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ значСния ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ / ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π° фактичСскиС значСния ΠΊΠ°ΠΊ истинныС / Π»ΠΎΠΆΠ½Ρ‹Π΅.

    ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ²:
    Настоящий ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²: Π²Ρ‹ прСдсказали ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ², ΠΈ это ΠΏΡ€Π°Π²Π΄Π°. Π’Ρ‹ прСдсказали, Ρ‡Ρ‚ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ — это кошка, ΠΈ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ.

    True Negative: Π²Ρ‹ прСдсказали ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ это ΠΏΡ€Π°Π²Π΄Π°. Π’Ρ‹ прСдсказали, Ρ‡Ρ‚ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ — это Π½Π΅ кошка, ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ (это собака).

    Π›ΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (ошибка Ρ‚ΠΈΠΏΠ° 1). Π’Ρ‹ прСдсказали ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ это Π½Π΅Π²Π΅Ρ€Π½ΠΎ. Π’Ρ‹ прСдсказали, Ρ‡Ρ‚ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ — это кошка, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ (это собака).

    Π›ΠΎΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅ (ошибка Ρ‚ΠΈΠΏΠ° 2). Π’Ρ‹ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ½ΠΎ Π»ΠΎΠΆΠ½ΠΎ. Π’Ρ‹ прСдсказали, Ρ‡Ρ‚ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ Π½Π΅ кошка, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это Ρ‚Π°ΠΊ.

    Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ классификации:
    Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ классификации опрСдСляСтся ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ:

    Напомним (Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°ΠΊΠ°):
    Напомним, опрСдСляСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰Π΅Π³ΠΎ количСства ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ классифицированных ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ количСству ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов. Или ΠΈΠ· всСх ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов, сколько ΠΌΡ‹ прСдсказали ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ΠžΡ‚Π·Ρ‹Π² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ высоким.

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

    Π£Π»ΠΎΠ²ΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ:Π΄ΠΎΠ·Ρ€Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΄ΠΎΠ”ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² Π·Π½Π°ΠΌΠ΅Π½Π°Ρ‚Π΅Π»Π΅.

    F-ΠΎΡ†Π΅Π½ΠΊΠ° ΠΈΠ»ΠΈ F1-ΠΎΡ†Π΅Π½ΠΊΠ°:
    Π‘Π»ΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Precision ΠΈ Recall. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… сопоставимыми, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ F-Score. Π­Ρ‚ΠΎ ГармоничСскоС БрСдство Вочности ΠΈ Π’ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с арифмСтичСским срСдним, гармоничСскоС срСднСС Π½Π°ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния. F-ΠΎΡ†Π΅Π½ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ высокой.

    Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ:
    Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ опрСдСляСт долю фактичСских Π½Π΅Π³Π°Ρ‚ΠΈΠ²ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹:
    Π”Π°Π²Π°ΠΉΡ‚Π΅ вычислим ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с кошкой ΠΈ собакой:

    Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ классификации:
    Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ = (TP + TN) / (TP + TN + FP + FN) = (3 + 4) / (3 + 4 + 2 + 1) = 0,70

    ΠžΡ‚Π·Ρ‹Π²:Напомним, Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π°, ΠΊΠ°ΠΊ часто ΠΎΠ½ прСдсказываСт Π΄Π°.
    Напомним = TP / (TP + FN) = 3 / (3 + 1) = 0,75

    Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ:Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ прСдсказываСт, Π΄Π°, ΠΊΠ°ΠΊ часто это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.
    Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ = TP / (TP + FP) = 3 / (3 + 2) = 0,60

    F-ΠΎΡ†Π΅Π½ΠΊΠ°:
    F-ΠΎΡ†Π΅Π½ΠΊΠ° = (2 * Recall * Precision) / (Recall + Presision) = (2 * 0,75 * 0,60) / (0,75 + 0,60) = 0,67

    Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ:
    Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ = TN / (TN + FP) = 4 / (4 + 2) = 0,67

    Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈ ΠΊΠΎΠ΄Ρ‹ Python, ΠΈ R, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с собакой ΠΈ кошкой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ Π΄ΠΎ сих ΠΏΠΎΡ€.

    ПИВОН:Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ возьмСм ΠΊΠΎΠ΄ Python для создания ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ sklearn, которая ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹

    НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° рСализация ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ объяснСния Π² Python:

    Код Python
    OUTPUT ->Confusion Matrix :
    [[3 1]
    [2 4]]
    Accuracy Score : 0.7
    Classification Report :
    precision recall f1-score supportcat 0.60 0.75 0.67 4
    dog 0.80 0.67 0.73 6micro avg 0.70 0.70 0.70 10
    macro avg 0.70 0.71 0.70 10
    weighted avg 0.72 0.70 0.70 10

    Π :Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ R-ΠΊΠΎΠ΄ для создания ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠ°Ρ€Π΅Ρ‚ Π² R для вычислСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹.

    Код R
    OUTPUT ->Confusion Matrix and Statistics             Reference
    Prediction 0 1
    0 4 1
    1 2 3Accuracy : 0.7
    95% CI : (0.3475, 0.9333)
    No Information Rate : 0.6
    P-Value [Acc > NIR] : 0.3823Kappa : 0.4Mcnemar's Test P-Value : 1.0000Sensitivity : 0.6667
    Specificity : 0.7500
    Pos Pred Value : 0.8000
    Neg Pred Value : 0.6000
    Prevalence : 0.6000
    Detection Rate : 0.4000
    Detection Prevalence : 0.5000
    Balanced Accuracy : 0.7083'Positive' Class : 0
    • Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ — это насколько Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² своих истинных ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сторонах. ВспомнитС, насколько Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π½Π΅ пропускаСтС Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π°.
    • Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ΠžΡ‚Π·Ρ‹Π²Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅Π»ΠΎΠΆΠ½Ρ‹Π΅ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Ρ‹ нСдопустимы / нСдопустимы.НапримСр, Π² случаС Π΄ΠΈΠ°Π±Π΅Ρ‚Π° Ρƒ вас Π±Ρ‹Π»ΠΎ Π±Ρ‹ большС Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний (Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний) вмСсто сохранСния Π»ΠΎΠΆΠ½Ρ‹Ρ… ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ….
    • Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΠ΅ΡΠ»ΠΈ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΠ»ΡŒΡˆΠ΅ΡƒΠ²Π΅Ρ€Π΅Π½ Π² своих истинных ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π°Ρ…, НапримСр, Π² случаС спам-писСм Π²Ρ‹ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько спам-писСм Π² вашСм ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ ящикС, Π° Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ элСктронныС письма Π² вашСм ящикС для спама. Π’Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ элСктронная ΠΏΠΎΡ‡Ρ‚Π° X являСтся спамом, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ помСстим Π΅Π΅ Π² ящик для спама.
    • Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΠ΅ΡΠ»ΠΈ Ρ…ΠΎΡ‡Π΅ΡˆΡŒΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ всС истинныС Π½Π΅Π³Π°Ρ‚ΠΈΠ²Ρ‹,Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний ΠΈΠ»ΠΈ Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний. НапримСр, Π² случаС тСста Π½Π° Π½Π°Ρ€ΠΊΠΎΡ‚ΠΈΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС люди с ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ тСстом Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² Ρ‚ΡŽΡ€ΡŒΠΌΡƒ, Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π±Π΅Π· Π½Π°Ρ€ΠΊΠΎΡ‚ΠΈΠΊΠΎΠ² отправлялся Π² Ρ‚ΡŽΡ€ΡŒΠΌΡƒ.

    ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ:

    • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ точности 70% ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ идСнтификация 3 ΠΈΠ· ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… 10 кошСк Π½Π΅Π²Π΅Ρ€Π½Π°, Π° 7 — ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°.
    • Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ 60% ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΊΠ° 4 ΠΈΠ· ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… 10 кошСк — это Π½Π΅ кошка (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ собака), Π° 6 — кошки.
    • Напомним, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 70% ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ 3 ΠΈΠ· ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… 10 кошСк Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ нашСй модСлью, Π° 7 ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ кошки.
    • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ спСцифичности, Ρ€Π°Π²Π½ΠΎΠ΅ 60%, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ 4 ΠΈΠ· ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… 10 собак (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ кошСк) Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ кошки, Π° 6 — ΠΊΠ°ΠΊ собаки.

    Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΠ»ΠΈ вопросы, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ свои ΠΎΡ‚Π·Ρ‹Π²Ρ‹ Π½ΠΈΠΆΠ΅. Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ со ΠΌΠ½ΠΎΠΉ ΠΏΠΎLinkedIn,

    ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ

    ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ Π² Python — GeeksforGeeks

    Π’ Python ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ 2D-список ΠΈΠ»ΠΈ 2D-массив. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠ· послСднСго Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅. Π­Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ массив ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Β« numpy Β».

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

    1. add (): — Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния поэлСмСнтного слоТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ .

    2. subtract (): — Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вычитания элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ .

    3. DivX (): — Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния поэлСмСнтного ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ дСлСния .



    ΠΈΠΌΠΏΠΎΡ€Ρ‚ numpy

    x = numpy.array ([[ 1 , ] 2 ] [ 4 , 5 ]])

    y = numpy.array ([[ 7 , 8 ], [ 9 , 10 ]])

    print ( "ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹: Β« )

    print (numpy.add (x, y))

    print ( Β» ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹: Β» )

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число.subtract (x, y))

    print ( "ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:" )

    print (numpy.divide (x, y) )

    Π’Ρ‹Ρ…ΠΎΠ΄:

    ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ слоТСниС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:
    [[8 10]
     [13 15]]
    ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:
    [[-6-6]
     [-5 -5]]
    ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:
    [[0.14285714 0,25]
     [0,44444444 0,5]]
     

    4. multiply (): — Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния поэлСмСнтного умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† .

    5. dot (): — Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вычислСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ умноТСния , Π° Π½Π΅ поэлСмСнтного умноТСния .

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ numpy

    x = numpy.массив ([[ 1 , 2 ], [ 4 , 5 ]])

    y = numpy.array ([[ 7 , 8 ], [ 9 , 10 ]])

    print ( "ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:" )

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число.multiply (x, y))

    print ( "Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:" )

    print (numpy.dot (x, y))

    Π’Ρ‹Ρ…ΠΎΠ΄:

    ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:
    [[7 16]
     [36 50]]
    ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:
    [[25 28]
     [73 82]]
     

    6. sqrt (): — Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вычислСния ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

    7. sum (x, axis): — Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для слоТСния всСх элСмСнтов Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ . ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ «ось» вычисляСт сумму столбцов , Ссли ось Ρ€Π°Π²Π½Π° 0, ΠΈ сумму строк , Ссли ось , Ρ€Π°Π²Π½Π° 1 .

    8. Β«TΒ»: — Π­Ρ‚ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для транспонирования ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ numpy

    x = numpy.массив ([[ 1 , 2 ], [ 4 , 5 ]])

    y = numpy.array ([[ 7 , 8 ], [ 9 , 10 ]])

    print ( "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ:" )

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число.sqrt (x))

    print ( "Π‘ΡƒΠΌΠΌΠ° всСх элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:" )

    print (numpy. сумма (y) )

    print ( "Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСй ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎ столбцам:" )

    print (numpy. сумма (y, ось ) = 0 ))

    print ( "ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΠΎΠ΅ суммированиС всСй ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:" )

    print (numpy. сумма (y, ось = 1 ))

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ( "ВранспонированиС Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:" )

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (xT)

    Π’Ρ‹Ρ…ΠΎΠ΄:

    Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ Ρ€Π°Π²Π΅Π½:
    [[1. 1.41421356]
     [2. 2.23606798]]
    Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Ρ… элСмСнтов:
    34
    Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСй ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎ столбцам:
    [16 18]
    Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСй ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎ строкам:
    [15 19]
    ВранспонированиС Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:
    [[1 4]
     [2 5]]
     

    Автор ΡΡ‚Π°Ρ‚ΡŒΠΈ Manjeet Singh 100 πŸ™‚ .Если Π²Π°ΠΌ нравится GeeksforGeeks, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ внСсти свой Π²ΠΊΠ»Π°Π΄, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ provide.geeksforgeeks.org ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅ Π½Π° [email protected]. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ваша ΡΡ‚Π°Ρ‚ΡŒΡ появляСтся Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ страницС GeeksforGeeks, ΠΈ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π³ΠΈΠΊΠ°ΠΌ.

    ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Ссли Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅, ΠΈΠ»ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅, обсуТдаСмой Π²Ρ‹ΡˆΠ΅.

    Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‰ΠΈΠΊ! Π£ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ свои основы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python Programming Foundation ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ основы.

    Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ ΠΊ собСсСдованию. Π Π°ΡΡˆΠΈΡ€ΡŒΡ‚Π΅ свои ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python DS . И Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ своС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ ΠΏΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ΡΡŒ ΠΊ курсу МашинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ — Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Python

    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°

    — это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ΅ располоТСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ чисСл. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ массив Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ чисСл. Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ записи Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «строками», Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ записи Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «столбцами».Если ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° содСрТит r строк ΠΈ c столбцов, Ρ‚ΠΎ порядок ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π²Π΅Π½ r x c . КаТдая запись Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ цСлочислСнной, ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ комплСксной.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

      // ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° 3 x 4 
         1 2 3 4
    М = 4 5 6 7
         6 7 8 9
    
      // ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 2 x 3 Π² Python 
    A = ([2, 5, 7],
          [4, 7, 9])
    
      // ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° 3 x 4 Π² Python, Π³Π΄Π΅ записи ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой 
    B = ([1.0, 3,5, 5,4, 7,9],
          [9.0, 2.5, 4.2, 3.6],
          [1.5, 3.2, 1.6, 6.5]) 

    Π’ Python ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π²Π²ΠΎΠ΄Π° ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. НСкоторыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π² Python ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½ΠΈΠΆΠ΅:

    Код # 1:

    R = int ( input ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк:" ))

    C = int ( Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов:" ))

    ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° = []

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ записи ΠΏΠΎ строкам:" )

    для i в диапазон (R):

    a = []

    для j i n диапазон (C):

    a.append ( int ( input ()))

    matrix.append (a)

    для i в диапазонС ( R):

    для j в диапазонС (C):

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° [i] [j], ΠΊΠΎΠ½Π΅Ρ† = " " )

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ()

    Π’Ρ‹Π²ΠΎΠ΄:


     Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк: 2
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов: 3
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ записи ΠΏΠΎ строкам:
    1
    2
    3
    4
    5
    6
    
    1 2 3
    4 5 6
     

    Один Π²ΠΊΠ»Π°Π΄Ρ‹Ρˆ:

    ΠΌΠ°Ρ‚ = [[ int ( Π²Ρ…ΠΎΠ΄ ()) для x Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (C )] для y Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (R)]


    Код # 2: ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ map () ΠΈ Numpy .

    Π’ Python сущСствуСт популярная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ NumPy . Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ для Π»ΡŽΠ±Ρ‹Ρ… Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… вычислСний. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов, ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° — это ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ массив, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ numpy as np

    R = int ( Π²Π²ΠΎΠ΄ ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк:" ) )

    C = int ( Π²Π²ΠΎΠ΄ ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов:" ))

    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ( "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ записи Π² ΠΎΠ΄Π½Ρƒ строку (Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»):" )

    записСй = список ( ΠΊΠ°Ρ€Ρ‚Π° ( int ) , Π²Ρ…ΠΎΠ΄ ().split ()))

    ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° = np.array (записи) .reshape (R, C)

    print (matrix)

    Π’Ρ‹Ρ…ΠΎΠ΄:

     Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк: 2
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов: 2
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ записи Π² ΠΎΠ΄Π½Ρƒ строку Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»: 1 2 3 1
    [[1 2]
     [3 1]] 

    Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‰ΠΈΠΊ! Π£ΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ свои основы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python Programming Foundation ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ основы.

    Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ΡΡŒ ΠΊ собСсСдованию. Π Π°ΡΡˆΠΈΡ€ΡŒΡ‚Π΅ свои ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ курса Python DS . И Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ своС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ ΠΏΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ МашинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ — курс Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ уровня

    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python

    Python извСстСн своСй Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ удобством чтСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Python, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ использованиС словарСй, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ Ρ‚. Π”. Π’ этом руководствС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ… ΠΈ ΠΈΡ… функциях.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π² Python?

    Π­Ρ‚ΠΎ двухмСрная (двумСрная) структура Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ ​​при ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π΅Ρ… сотрудников Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΡ‚Π΄Π΅Π»ΠΎΠ². Π’ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

    900
    Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сотрудника Имя сотрудника ΠžΡ‚Π΄Π΅Π» сотрудника
    1001A Ray ВСхничСский Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ
    2004B ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠšΠ°Ρ€Π»ΠΎΡ
    3100A Alex Π’Π΅Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

    Π’ Python эти Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ.Python Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ списков.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

      val = [['1001A', 'Ray', 'Technical Head'], ['2004B', 'Karlos', 'Manager'], ['3100A', 'Alex', 'Lead Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ']]  

    Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° val прСдставляСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 3 X 3, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… строк ΠΈ Ρ‚Ρ€Π΅Ρ… столбцов.

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python

    Python позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список. Бписки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы, Ссли Π²Ρ‹ помСститС всС элСмСнты ΠΈΠ»ΠΈ элСмСнты, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с ‘[‘ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ‘]’ (ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки), ΠΈ раздСляСтС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт запятой.

      val = [['Дэйв', 101,90,95],
    
    ['Alex', 102,85,100],
    
    ['Ray', 103,90,95]]  

    ДинамичСскоС созданиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π² Python

    МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ, пСрСчислив Π½Π°Π±ΠΎΡ€ элСмСнтов (скаТСм, n), Π° Π·Π°Ρ‚Π΅ΠΌ связав ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· элСмСнтов с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ список ΠΈΠ· m элСмСнтов. Π’ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° для этого:

      n = 3
    ΠΌ = 3
    val = [0] * n
    для x в диапазонС (n):
        val [x] = [0] * m
    print (val)  

    Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚:

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

    Π•ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ получСния элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python.

    i) ИндСкс списка : Для доступа ΠΊ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ строки ΠΈ столбца, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: val [row_no] [col_no]

      val = [ ['Дэйв', 101,90,95], ['АлСкс', 102,85,100], ['Рэй', 103,90,95]]
    
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (val [2])
    
    print (val [0] [1])  

    Π’Ρ‹Π²ΠΎΠ΄:

     ['Ray', 103,90,95]
    
    101 

    ii) ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ индСксированиС : Python Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ индСксации с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ значСниям.ΠŸΡ€ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ индСксации -1 относится ΠΊ послСднСму элСмСнту ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, -2 — ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ послСднСму ΠΈ продолТаСтся.

      val = [['Dave', 101,90,95], ['Alex', 102,85,100], ['Ray', 103,90,95]]
    
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (val [-2])
    
    print (val [-1] [- 2])  

    Π’Ρ‹Π²ΠΎΠ΄:

     ['Alex', 102,85,100]
    
    90 

    Π Π°Π±ΠΎΡ‚Π° с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Numpy: пСрвая удобная ссылка

    ИСва Π—Π°Ρ€ΠΈΠ½Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Nordigen.

    Π’ Π½Π°Ρ‡Π°Π»Π΅, ΠΊΠΎΠ³Π΄Π° я Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ СстСствСнного языка, я использовал списки Python ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.Но довольно скоро, послС Π±ΠΎΠ»Π΅Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… экспСримСнтов ΠΈ большСго количСства Π΄Π°Π½Π½Ρ‹Ρ…, Ρƒ мСня заканчиваСтся опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ. Бписки Python Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для пространства памяти, поэтому Π½Π° Numpy.


    Numpy — это Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ инструмСнт
    ndarray для Π½Π°ΡƒΡ‡Π½ΠΎΠΉ экосистСмы Python.

    ΠœΠ°ΡΡΠΈΠ²Ρ‹ Numpy ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° C — ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ создаСтС массив Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π·Π°Ρ€Π°Π½Π΅Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ заполняСтС Π΅Π³ΠΎ. БлияниС ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Numpy создаст ΠΎΠ΄ΠΈΠ½ пустой массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ с ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡ‹Π΅ массивы, Π° Π·Π°Ρ‚Π΅ΠΌ просто скопируСт Π² Π½Π΅Π³ΠΎ содСрТимоС.

    Π’ΠΎΡ‚ нСсколько способов манипулирования массивами Numpy (ndarray):

    Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ndarray


    НСкоторыС способы создания ΠΌΠ°Ρ‚Ρ€ΠΈΡ† numpy:

     ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    
    список = [1, 2, 3]
    c = np.asarray (список)
     
    • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ndarray Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ, нулями ΠΈΠ»ΠΈ случайными значСниями:
     # Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΊΠ°ΠΊ ndarray
    c = np.array ([1, 2, 3])
    
    # Π€ΠΎΡ€ΠΌΠ° массива 2x2 2d для массивов Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (строки, столбцы)
    shape = (2, 2)
    
    # Π‘Π»ΡƒΡ‡Π°ΠΉΠ½Ρ‹Π΅ значСния
    c = np.пустой (Ρ„ΠΎΡ€ΠΌΠ°)
    
    d = np.ones (Ρ„ΠΎΡ€ΠΌΠ°)
    e = np.zeros (Ρ„ΠΎΡ€ΠΌΠ°)
     
     # БозданиС ndarray из списка
    c = np.array ([[1., 2.,], [1., 2.]])
    
    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ массива Π² Ρ„ΠΎΡ€ΠΌΠ΅ c, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ 0
    d = np.empty_like (c)
     

    Π›ΠΎΠΌΡ‚ΠΈΠΊ


    Иногда ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ· всСх столбцов ΠΈΠ»ΠΈ строк Π² 2-ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅. НапримСр, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:

     a = np.asarray ([[1,1,2,3,4], # 1-я строка
                    [2,6,7,8,9], # 2-я строка
                    [3,6,7,8,9], # 3-ΠΉ ряд
                    [4,6,7,8,9], # 4-ΠΉ ряд
                    [5,6,7,8,9] # 5-ΠΉ ряд
                  ])
    
    Π± = Π½ΠΏ.asarray ([[1,1],
                    [1,1]])
    
    # Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ строку Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ a [Π½Π°Ρ‡Π°Π»ΠΎ: ΠΊΠΎΠ½Π΅Ρ†], Ссли Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.
    y = a [: 1] # 1-я строка
    y = a [0: 1] # 1-я строка
    y = a [2: 5] # Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ строки с 3-ΠΉ ΠΏΠΎ 5-ю строку
    
    # Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ столбСц Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ a [Π½Π°Ρ‡Π°Π»ΠΎ: ΠΊΠΎΠ½Π΅Ρ†, Π½ΠΎΠΌΠ΅Ρ€_столбца]
    x = a [:, -1] # -1 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ с ΠΊΠΎΠ½Ρ†Π°
    x = a [:, 1: 3] # Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ столбцы со 2-Π³ΠΎ ΠΏΠΎ 3-ΠΉ
     

    ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ массивы


    ОбъСдинСниС массивов numpy — , Π½Π΅ рСкомСндуСтся , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ numpy создаст пустой большой массив, Π° Π·Π°Ρ‚Π΅ΠΌ скопируСт Π² Π½Π΅Π³ΠΎ содСрТимоС.Π›ΡƒΡ‡ΡˆΠ΅ всСго сначала ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π° Π·Π°Ρ‚Π΅ΠΌ просто Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Однако ΠΈΠ½ΠΎΠ³Π΄Π° слияния Π½Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ. Π’ этом случаС numpy ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ :

    ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ

    1d массивов:

     a = np.array ([1, 2, 3])
    b = np.array ([5, 6])
    Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.concatenate ([a, b, b])
    # >> [1 2 3 5 6 5 6]
     

    2d массивов:

     a2 = np.array ([[1, 2], [3, 4]])
    
    # axis = 0 - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΠΎ строкам
    Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ((a2, b), ось = 0)
    # >> [[1 2]
    # [3 4]
    # [5 6]]
    
    # axis = 1 - ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΠΎ столбцам, Π½ΠΎ сначала Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ b:
    Π±.Π’
    # >> [[5]
    # [6]]
    np.concatenate ((a2, b.T), ось = 1)
    # >> [[1 2 5]
    # [3 4 6]]
     

    Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ — Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ значСния Π² ΠΊΠΎΠ½Π΅Ρ† массива

    1d массивов:

     # 1d массивы
    Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.append (a, a2)
    # >> [1 2 3 1 2 3 4]
    
    Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (Π°, Π°)
    # >> [1 2 3 1 2 3]
     

    2d массивов — ΠΎΠ±Π° массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ΅ строк:

     ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ np.append (a2, b, axis = 0)
    # >> [[1 2]
    # [3 4]
    # [5 6]]
    
    Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.append (a2, b.T, axis = 1)
    # >> [[1 2 5]
    # [3 4 6]]
     

    Hstack (стСк ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ) ΠΈ vstack (стСк ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ)

    1d массивов:

     Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.hstack ([a, b])
    # >> [1 2 3 5 6]
    
    Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.vstack ([a, a])
    # >> [[1 2 3]
    # [1 2 3]]
     

    2d массивов:

     print np.hstack ([a2, a2]) # массивы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ΅
    # >> [[1 2 1 2]
    # [3 4 3 4]]
    
    Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ np.vstack ([a2, b])
    # >> [[1 2]
    # [3 4]
    # [5 6]]
     

    Π’ΠΈΠΏΡ‹ Π² ndarray


    Π‘Π΅Π· значСния с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ numpy ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС распространСнныС Ρ‚ΠΈΠΏΡ‹ . Если любоС ΠΈΠ· чисСл Π² массивС являСтся ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΌ, всС числа Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой:

     а = нп.массив ([1, 2, 3.3])
    Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ
    # >> [1. 2. 3.3]
     

    Но Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ привСсти Ρ‚ΠΈΠΏ ΠΊ int, float ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ:

     a = np.array ([1, 2, 3.3])
    Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ
    # >> [1. 2. 3.3] Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ a.astype (int)
    # >> [1 2 3]
     

    Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ массивы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ массивы с Ρ‚ΠΈΠΏΠΎΠΌ S1 для строки Π΄Π»ΠΈΠ½ΠΎΠΉ 1, S2 для Π΄Π»ΠΈΠ½Ρ‹ 2 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. numpy.chararray () создаСт массив с этим Ρ‚ΠΈΠΏΠΎΠΌ. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ массива ΠΈ itemsize — Π΄Π»ΠΈΠ½Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки.

     chararray = np.chararray ([3,3], itemsize = 3)
    chararray [:] = 'abc' # присвоСниС значСния всСм полям
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ chararray
    # >> [['abc' 'abc' 'abc']
    # ['abc' 'abc' 'abc']
    # ['abc' 'abc' 'abc']]
     

    Π§Ρ‚Π΅Π½ΠΈΠ΅ / запись Π² Ρ„Π°ΠΉΠ»


    Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ массив numpy Π² Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ numpy.savetext () Π² тСкстовой Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ numpy.loadtext ():

     a2 = np.array ([
        [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1],
        [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1],
        [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1],
        [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1],
        [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1],
        [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
    ])
    
    Π½ΠΏ.savetxt ('test.txt', a2, delimiter = ',')
    a2_new = np.loadtxt ('test.txt', delimiter = ',')
     

    Π—Π°ΠΏΠΈΡΡŒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

    Однако Π² машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ большая разрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° (с большим количСством Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π²Π½Ρ‹Ρ… 0), Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† выполняСтся быстрСС, Π° Ρ„Π°ΠΉΠ» мСньшС, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ svmlight :

     ΠΈΠ· sklearn.datasets import dump_svmlight_file, load_svmlight_file
    
    ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° = [
        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2],
        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2],
        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2],
        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2],
        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2],
        [1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 2],
        [1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 2]
    ]
    
    ярлыки = [1,1,1,1,1,2,2]
    
    
    dump_svmlight_file (ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, ΠΌΠ΅Ρ‚ΠΊΠΈ, 'svmlight.txt ', zero_based = True)
    
    # Π€Π°ΠΉΠ» выглядит Ρ‚Π°ΠΊ:
    
    # 1 0: 1 13: 1 14: 2
    # 1 0: 1 13: 1 14: 2
    # 1 0: 1 13: 1 14: 2
    # 1 0: 1 13: 1 14: 2
    # 1 0: 1 13: 1 14: 2
    # 2 0: 1 5: 3 13: 1 14: 2
    # 2 0: 1 5: 3 13: 1 14: 2
    
    svm_loaded = load_svmlight_file ('svmlight.txt', zero_based = True)
     

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ .toarray (), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° сТатых Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… строк svmlight:

     svm_loaded [0] .toarray () # элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с индСксом 0
    svm_loaded [1] # ярлыков Π² индСксС 1
     

    Подводя ΠΈΡ‚ΠΎΠ³, Π² этом постС Π±Ρ‹Π»ΠΎ рассмотрСно, ΠΊΠ°ΠΊ:

    • ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массивы numpy,
    • массивов срСзов,
    • ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ массивы,
    • Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² массивов numpy,
    • Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись массивов Π² Ρ„Π°ΠΉΠ»,
    • Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ svmlight.

    Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ просто Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² numpy-ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ манипуляции. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² этом руководствС MIT, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

    Биография: ИСва Π—Π°Ρ€ΠΈΠ½Π° — Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² Nordigen.

    ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π». Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

    Бвязанный:

    1. Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ массивы

    ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

    Частая ситуация Π² машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ — ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π΄Π°Π½Π½Ρ‹Π΅; ΠΎΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… — Π½ΡƒΠ»ΠΈ.НапримСр, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ столбцы — это ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΠΌ Π½Π° Netflix, Π° строки ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Netflix, Π° значСния — сколько Ρ€Π°Π· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смотрСл ΠΈΠΌΠ΅Π½Π½ΠΎ этот Ρ„ΠΈΠ»ΡŒΠΌ. Π’ этой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ Π±Ρ‹Π»ΠΈ Π±Ρ‹ дСсятки тысяч столбцов ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² строк! Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π΅ смотрят Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ элСмСнтов Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ.

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

      # ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ 
      ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ   (  matrix_sparse  )  
     (1, 1) 1
      (2, 0) 3 

    Π•ΡΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Однако Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ… сТатых Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… строк (CSR), (1, 1) ΠΈ (2, 0) ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ (с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ индСксом) индСксы Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 1 ΠΈ 3 , соотвСтствСнно.НапримСр, элСмСнт 1 находится Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ столбцС. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ прСимущСство Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, Ссли ΠΌΡ‹ создадим Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ с большим количСством Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов, Π° Π·Π°Ρ‚Π΅ΠΌ сравним эту Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ с нашСй исходной Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ:

      # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 
      matrix_large   =   np  .   массив   ([[  0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ], 
                               [  0  ,   1  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ], 
                               [  3  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ,   0  ]]) 
    
      # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ сТатых Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… строк (CSR) 
      matrix_large_sparse   =   sparse  .  csr_matrix   (  matrix_large  )  
      # ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ исходной Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ 
      ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ   (  matrix_sparse  )  
     (1, 1) 1
      (2, 0) 3 
      # Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 
      ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ   (  matrix_large_sparse  )  
     (1, 1) 1
      (2, 0) 3 

    Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Π΅Π΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠ΅ прСдставлСниС Π² точности совпадаСт с нашСй исходной Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ.Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

    Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, сущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π² Π²ΠΈΠ΄Π΅ сТатого Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ столбца, списка списков ΠΈ словаря ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π₯отя объяснСниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΈΡ… значСния Π²Π½Π΅ Ρ€Π°ΠΌΠΎΠΊ этой ΠΊΠ½ΠΈΠ³ΠΈ, стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ Π½Π΅Ρ‚ Β«Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎΒ» Ρ‚ΠΈΠΏΠ° Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΡ…, ΠΈ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

    Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NumPy?

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

    Π‘ΠžΠΠ£Π‘ : Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ всС вмСстС — ΠΊΠΎΠ΄ Python для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ систСмы Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ

    Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ NumPy ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

    NumPy — это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ числСнныС вычислСния с использованиСм ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.Как слСдуСт ΠΈΠ· названия, NumPy ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ справляСтся с числСнными расчСтами. МногиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π°ΡƒΠΊΠΈ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Pandas , Scikit-learn , SciPy , matplotlib, ΠΈ Ρ‚. Π”., Зависят ΠΎΡ‚ NumPy. Он являСтся Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ соврСмСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, написанных Π½Π° Python.

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

    NumPy прСдоставляСт:

    • ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ N-ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ndarray
    • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ вСщания
    • Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° C / C ++ ΠΈ Fortran
    • ПолСзная линСйная Π°Π»Π³Π΅Π±Ρ€Π°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ ΠΈ возмоТности случайных чисСл

    БСйчас Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ с нашими ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π² Python ΠΈ посмотрим, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² NumPy

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с использованиСм списков
     ## Import numpy
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    
    ## Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив numpy, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ списки Python
    arr = np.массив ([[1, 2, 3], [4, 5, 6]])
    print (arr) 

    np.array ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания массива NumPy ΠΈΠ· списка. ΠœΠ°ΡΡΠΈΠ²Ρ‹ NumPy ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ ndarray.

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся:

    Она прСдставляСт собой Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Π³Π΄Π΅ Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² np.array () являСтся список списков [[1, 2, 3], [4, 5, 6]]. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ список Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ спискС ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ строку Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅.

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с использованиСм Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ²

    np.arange () ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π°.

     ## ГСнСрация чисСл ΠΎΡ‚ (Π½Π°Ρ‡Π°Π»ΠΎ) Π΄ΠΎ (ΠΊΠΎΠ½Π΅Ρ†-1)
    ## Π—Π΄Π΅ΡΡŒ start = 0
    ## ΠΊΠΎΠ½Π΅Ρ† = 5
    ## Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ массив NumPy ΠΎΡ‚ 0 Π΄ΠΎ 4
    print (np.arange (0,5)) 

    Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив:

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 2D-ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ np.arange () Π²Π½ΡƒΡ‚Ρ€ΠΈ списка. ΠœΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ этот список Π² np.array (), Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом NumPy.

     print (np.array ([np.arange (0,5), np.arange (5,10)]))
     

    Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ 2D-массив:

    Π€ΠΎΡ€ΠΌΠ° массива NumPy

    ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ NumPy массивом N-ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.Π’ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ это называСтся N-Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° NumPy ndarray ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΡƒ. Π€ΠΎΡ€ΠΌΠ° — это ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (n_rows, n_cols)

    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

     ## ИспользованиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π° для создания ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с использованиСм Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ²
    arr_2d = np.array ([np.arange (0,5), np.arange (5,10)])
    print (arr_2d.shape) 

    Π’Ρ‹Π²ΠΎΠ΄:

    (2, 5) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΈΠΌΠ΅Π΅Ρ‚ 2 строки ΠΈ 5 столбцов

    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° нулями ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ
    Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΡƒΠ»ΠΈ:
     ## Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ„ΠΎΡ€ΠΌΡ‹ (3, 4), Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ нулями
    ## По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ числа Ρ‚ΠΈΠΏΠ° float64 Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π½ΠΏ.Π½ΡƒΠ»ΠΈ ((3, 4))) 

    Π’Ρ‹Π²ΠΎΠ΄:

    По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² массивС Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅.

    Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ:
     ## Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ„ΠΎΡ€ΠΌΡ‹ (2, 2), Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ
    ## Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ dtype = np.int16, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просит NumPy ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа
    print (np.ones ((2, 2), dtype = np.int16)) 

    Π’Ρ‹Π²ΠΎΠ΄:

    ΠŸΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ с Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ dtype = Π½ΠΏ.int16. Π­Ρ‚ΠΎ заставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ np.ones Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа, Π° Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² np.zeros

    ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

    Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅

    Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° слоТСния:

    • БкалярноС слоТСниС
    • ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ΅ слоТСниС

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    ## Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    mat_2d_1 = np.array ([np.arange (0,3), np.arange (3,6)])
    mat_2d_2 = нп.массив ([np.arange (6,9), np.arange (9,12)]) 
    print («ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°1: n», mat_2d_1) print («ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°2: n», mat_2d_2) ## Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ 1 ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту Π² mat_2d_1 ΠΈ распСчатайтС Π΅Π³ΠΎ print («БкалярноС слоТСниС: nΒ», mat_2d_1 + 1) ## Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Ρ‹ΡˆΠ΅ поэлСмСнтно print (Β«ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ слоТСниС Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°: nΒ», mat_2d_1 + mat_2d_2)

    Π’Ρ‹Π²ΠΎΠ΄:

    Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅

    Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ слоТСнию. Нам просто Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ со слоТСния Π½Π° Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅.

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    
    ## Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    mat_2d_1 = np.array ([np.arange (0,3), np.arange (3,6)])
    mat_2d_2 = np.array ([np.arange (6,9), np.arange (9,12)])
    
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°1: n", mat_2d_1)
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°2: n", mat_2d_2)
    
    ## Π’Ρ‹Ρ‡Ρ‚ΠΈΡ‚Π΅ 1 ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² mat_2d_1 ΠΈ распСчатайтС Π΅Π³ΠΎ
    print («БкалярноС слоТСниС: nΒ», mat_2d_1 - 1)
    
    ## Π’Ρ‹Ρ‡Ρ‚ΠΈΡ‚Π΅ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Ρ‹ΡˆΠ΅ поэлСмСнтно
    print (Β«ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°: nΒ», mat_2d_1 - mat_2d_2) 

    Π’Ρ‹Π²ΠΎΠ΄:

    ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅

    МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° умноТСния ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ NumPy

    • БкалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅: скалярноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ умноТаСтся Π½Π° всС элСмСнты ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    • Π’ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅: это ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.Π‘ΠΌ. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Β» ΠΏΡ€Π°Π²ΠΈΠ»Π° умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    
    ## Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ„ΠΎΡ€ΠΌΡ‹ (2,3) ΠΈ (3,2), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΉΡ‚ΠΈ
    ## скалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅
    mat_2d_1 = np.array ([np.arange (0,3), np.arange (3,6)])
    mat_2d_2 = np.array ([np.arange (0,2), np.arange (2,4), np.arange (4,6)])
    
    ## ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°1: n", mat_2d_1)
    print ("Matrix1 shape: n", mat_2d_1.shape)
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°2: n", mat_2d_2)
    print ("Matrix2 shape: n", mat_2d_2.shape)
    
    ## Π£ΠΌΠ½ΠΎΠΆΡŒΡ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π½Π° 2 Π² mat_2d_1 ΠΈ распСчатайтС Π΅Π³ΠΎ
    print («БкалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅: nΒ», mat_2d_1 * 2)
    
    ## НайдитС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скалярного произвСдСния
    print ("Π’ΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚: n", np.Ρ‚ΠΎΡ‡ΠΊΠ° (mat_2d_1, mat_2d_2))
     

    Π’ΠΠ–ΠΠž : ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для скалярного умноТСния. Однако для умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ np.dot (), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄Π²Π° 2D-массива NumPy.

    Π’Ρ‹Ρ…ΠΎΠ΄:

    Π”Π΅Π»Π΅Π½ΠΈΠ΅

    ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ скалярноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° дСлСния /

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    
    ## Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ„ΠΎΡ€ΠΌΡ‹ (2,3)
    mat_2d = нп.массив ([np.arange (0,3), np.arange (3,6)])
    
    ## Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°: n", mat_2d)
    
    ## Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° скаляр
    print («БкалярноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅: nΒ», mat_2d / 2)
     

    Π’Ρ‹Ρ…ΠΎΠ΄:

    ЭкспонСнта

    ЭлСмСнтная экспонСнта ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° **

    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    
    ## Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ„ΠΎΡ€ΠΌΡ‹ (2,3)
    mat_2d = np.array ([np.arange (0,3), np.arange (3,6)])
    
    ## Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°: n", mat_2d)
    
    ## НайдитС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСпСни ΠΏΠΎ элСмСнтам i.Π΅. возвСсти ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ 2
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π² стСпСни 2: n", mat_2d ** 2)
     

    Π’Ρ‹Π²ΠΎΠ΄:

    ВранспонированиС
    • транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ — это новая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° , строки ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ столбцами исходной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A (
    • 310 ) ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° становится (3, 2) ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ΅
    • Numpy ΠΈΠΌΠ΅Π΅Ρ‚ свойство для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ndarray, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.Нам Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.
    • matrix.T обСспСчиваСт транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² NumPy
    • НиТСпривСдСнный Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ дСмонстрируСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ транспонирования
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    
    ## Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ„ΠΎΡ€ΠΌΡ‹ (2,3)
    mat_2d = np.array ([np.arange (0,3), np.arange (3,6)])
    
    ## Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°: n", mat_2d)
    
    ## ВранспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    print ("Π’Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ n", mat_2d.T)
     

    Π’Ρ‹Π²ΠΎΠ΄:

    НарСзка ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    • Π‘Π»ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.Python прСдоставляСт прСкрасный синтаксис для индСксирования ΠΈ Π½Π°Ρ€Π΅Π·ΠΊΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.
    • НарСзка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:
      • ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° [Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ индСкса строки, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ индСкса столбца, Π½ΠΎΠΌΠ΅Ρ€ шага]
      • Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ индСкса строки ΠΈ столбца ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ стандартному синтаксису Python ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс: ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс
      • Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ всСгда ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎ индСкса Π΄ΠΎ (ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс — 1) ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ΄Π°

    НарСзка для Π²Ρ‹Π±ΠΎΡ€Π° строки
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    mat_2d = нп.массив ([np.arange (0,3), np.arange (3,6)])
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°: n", mat_2d)
    
    # ΠΠ°Ρ€Π΅Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ строку Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅
    print ("НарСзано: n", mat_2d [1 :,:])
     

    Π’Ρ‹Π²ΠΎΠ΄:

      • Π’Ρ‹Π±ΠΎΡ€ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° строк 1: ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ индСкса строки 1 Π΄ΠΎ послСднСй строки
      • ИндСкс Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° столбцов: ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ всСх столбцов Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ строк

    НарСзка для Π²Ρ‹Π±ΠΎΡ€Π° столбца
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    mat_2d = нп.массив ([np.arange (0,3), np.arange (3,6)])
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°: n", mat_2d)
    
    # Π‘Ρ€Π΅Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдний столбСц Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅
    print ("НарСзанный: n", mat_2d [:, 2:])
     

    Π’Ρ‹Ρ…ΠΎΠ΄:

      • Π’Ρ‹Π±ΠΎΡ€ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° строк: ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ всСх строк
      • ИндСкс Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° столбцов 2: ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ всСх столбцов, начиная с индСкса 2 Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°

    НарСзка для Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ΄ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
    # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    mat_2d = нп.массив ([np.arange (0,4), np.arange (4,8), np.arange (8,12), np.arange (12,16)])
    print ("ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°: n", mat_2d)
    
    # ΠΠ°Ρ€Π΅ΠΆΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ (2, 2) ΠΏΠΎΠ΄ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ mat_2d
    # Ρ‚.Π΅.
    # [[5 6]
    # [9 10]]
    print ("НарСзано: n", mat_2d [1: 3, 1: 3])
     

    Π’Ρ‹Π²ΠΎΠ΄:

      • Π’Ρ‹Π±ΠΎΡ€ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° строк 1: 3 Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ строки с индСксами ΠΎΡ‚ 1 Π΄ΠΎ 2 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
      • Π’Ρ‹Π±ΠΎΡ€ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° столбцов 1: 3 Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ столбцы с индСксами с 1 ΠΏΠΎ 2 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

    Π‘ΠžΠΠ£Π‘: Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ систСмы ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ

    БистСма ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ

    • ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Π°Ρ запись для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ систСмы ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ:
      • X = np.Ρ‚ΠΎΡ‡ΠΊΠ° ((инвСрсия A), B)
      • Π“Π΄Π΅:
        • X = Π²Π΅ΠΊΡ‚ΠΎΡ€ нСизвСстных
        • A = ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π° LHS
        • B = ЗначСния Π½Π° RHS
        • НапримСр, рассмотрим Π½ΠΈΠΆΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ систСму ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ:
        • x + y + z = 1
          2x + 4y + z = -2
          x — y + z = 0
        • ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΊΠ°ΠΊ:
        • X = [xyz] Π²Π΅ΠΊΡ‚ΠΎΡ€ нСизвСстных
          A = [[1 1 1]
          [2 4 1]
          [1 -1 1]]

          B = [1-2 0]
        • ИспользованиС упомянутой ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ систСму ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
        ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
        
        ## A = (3,3) ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°
        А = np.массив ([[1,1,1], [2,4,1], [1, -1,1]])
        ## B = (3,1) ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°
        B = np.array ([1, -2, 0]). T
        
        ## X = Inv (A) .B = (3, 1) Π² Ρ„ΠΎΡ€ΠΌΠ΅
        X = np.dot (np.linalg.inv (A), B)
        
        print ("РСшСниС: n", X)
         

        Π’Ρ‹Π²ΠΎΠ΄:

        Π“Π΄Π΅, x = -4,5, y = 0,5 ΠΈ z = 5,0

        На этом ΠΌΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ нашСй ΡΡ‚Π°Ρ‚ΡŒΠΈ. НадСюсь, Π²Ρ‹ поняли, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python.

        Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ знания ΠΎ Python ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прилоТСниях, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python Certification Training Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с круглосуточной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈ ΠΏΠΎΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ доступом.

        Π•ΡΡ‚ΡŒ ΠΊ Π½Π°ΠΌ вопрос? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ это Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π±Π»ΠΎΠ³Π° Β«ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² PythonΒ», ΠΈ ΠΌΡ‹ свяТСмся с Π²Π°ΠΌΠΈ Π² блиТайшСС врСмя.

        Π Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (scipy.sparse) — SciPy v1.6.3 Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΠ΅ руководство

        ΠŸΠ°ΠΊΠ΅Ρ‚ SciPy 2-D Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ для числовых Π΄Π°Π½Π½Ρ‹Ρ….

        Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

        ΠšΠ»Π°ΡΡΡ‹ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

        bsr_matrix (arg1 [, shape, dtype, copy, blockize])

        ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° с Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ строками Π±Π»ΠΎΠΊΠΎΠ²

        coo_matrix (arg1 [, shape, dtype, copy])

        РазрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ COOrdinate.

        csc_matrix (arg1 [, shape, dtype, copy])

        БТатая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° с Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ столбцами

        csr_matrix (arg1 [, shape, dtype, copy])

        БТатая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… строк

        dia_matrix (arg1 [, shape, dtype, copy])

        РазрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° с DIAgonal Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ

        dok_matrix (arg1 [, shape, dtype, copy])

        РазрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π° основС словаря ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

        lil_matrix (arg1 [, shape, dtype, copy])

        ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ список списков разрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°

        spmatrix ([maxprint])

        Π­Ρ‚ΠΎΡ‚ класс прСдоставляСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для всСх Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

        Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

        ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

        Π³Π»Π°Π· (m [, n, k, dtype, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚])

        РазрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° с Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ

        ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (n [, dtype, format])

        ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° идСнтичности Π² Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

        ΠΊΡ€ΠΎΠ½ (A, B [, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚])

        ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ½Π΅ΠΊΠ΅Ρ€Π° Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† А ΠΈ Π‘

        ΠΊΡ€ΠΎΠ½ (A, B [, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚])

        сумма ΠΊΡ€ΠΎΠ½Π΅ΠΊΠ΅Ρ€Π° Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† A ΠΈ B

        Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ (Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ [, смСщСния, Ρ„ΠΎΡ€ΠΌΠ°, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, dtype])

        ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ.

        spdiags (Π΄Π°Π½Π½Ρ‹Π΅, Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, m, n [, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚])

        Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ.

        block_diag (mats [, format, dtype])

        ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ Π±Π»ΠΎΡ‡Π½ΠΎ-Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· прСдоставлСнных ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

        tril (A [, k, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚])

        Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ ниТнюю Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

        triu (A [, k, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚])

        Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

        bmat (Π±Π»ΠΎΠΊΠΈ [, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, dtype])

        ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… субблоков

        hstack (Π±Π»ΠΎΠΊΠΈ [, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, dtype])

        Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ (ΠΏΠΎ столбцам)

        vstack (Π±Π»ΠΎΠΊΠΈ [, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, dtype])

        Π£ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ (ΠΏΠΎ строкам)

        rand (m, n [, ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, dtype,…])

        Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ плотности с Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлСнными значСниями.

        случайный (m, n [, ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, dtype,…])

        Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ плотности со случайно распрСдСлСнными значСниями.

        Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

        save_npz (Ρ„Π°ΠΉΠ», ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° [, сТатый])

        Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ .npz .

        load_npz (Ρ„Π°ΠΉΠ»)

        Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ .npz .

        Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ:

        Π½Π°ΠΉΡ‚ΠΈ (A)

        Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСксы ΠΈ значСния Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

        ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

        Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± использовании

        Доступно сСмь Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

        1. csc_matrix: сТатый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… столбцов

        2. csr_matrix: сТатый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… строк

        3. bsr_matrix: Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… строк Π±Π»ΠΎΠΊΠ°

        4. lil_matrix: Π€ΠΎΡ€ΠΌΠ°Ρ‚ списка списков

        5. dok_matrix: Π€ΠΎΡ€ΠΌΠ°Ρ‚ словаря ΠΊΠ»ΡŽΡ‡Π΅ΠΉ

        6. coo_matrix: COOrdinate Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Ρ‚Π°ΠΊΠΆΠ΅ извСстный ΠΊΠ°ΠΊ IJV, Ρ‚Ρ€ΠΈΠΏΠ»Π΅Ρ‚Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚)

        7. dia_matrix: DIA Π£Π³Π»ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚

        Для эффСктивного построСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ dok_matrix ΠΈΠ»ΠΈ lil_matrix.Класс lil_matrix ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Π½Π°Ρ€Π΅Π·ΠΊΡƒ ΠΈ ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²ΡƒΡŽ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксис Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ массивам NumPy. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ COO Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для эффСктивного построСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. НСсмотря Π½Π° ΠΈΡ… сходство с массивами NumPy, катСгоричСски Π½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NumPy Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСпосрСдствСнно Π½Π° этих ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ NumPy ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для вычислСний, приводящих ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ (ΠΈ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ) Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ. Ссли Ρ‚Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ NumPy ΠΊ этим ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌ, сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² SciPy собствСнная рСализация для Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ разрСТСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π² массив NumPy (e.g., ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ toarray () class) ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

        Для выполнСния Ρ‚Π°ΠΊΠΈΡ… манипуляций, ΠΊΠ°ΠΊ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ инвСрсия, сначала ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ CSC ΠΈΠ»ΠΈ CSR. Π€ΠΎΡ€ΠΌΠ°Ρ‚ lil_matrix: Π½Π° основС строк, поэтому ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² CSR эффСктивно, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² CSC мСньшС Ρ‚Π°ΠΊ.

        ВсС прСобразования ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ CSR, CSC ΠΈ COO эффСктивны, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ.

        ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ произвСдСния

        Π§Ρ‚ΠΎΠ±Ρ‹ произвСсти Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ matrix dot , ΠΊΠ°ΠΊ описано Π² Π΅Π³ΠΎ строкС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

         >>> ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
        >>> ΠΎΡ‚ scipy.Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ csr_matrix
        >>> A = csr_matrix ([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
        >>> v = np.array ([1, 0, -1])
        >>> A.dot (v)
        массив ([1, -3, -1], dtype = int64)
         

        ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

        Начиная с NumPy 1.7, np.dot Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ…, поэтому Π΅Π³ΠΎ использованиС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ ошибкам. ВмСсто этого сначала Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ»ΠΎΡ‚Π½Ρ‹ΠΉ массив:

         >>> np.dot (A.toarray (), v)
        массив ([1, -3, -1], dtype = int64)
         

        , Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° всС прСимущСства Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ потСряны.

        Π€ΠΎΡ€ΠΌΠ°Ρ‚ CSR особСнно ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для быстрых ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ.

        ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

        Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ lil_matrix Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1000×1000 ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ Π½Π΅ΠΌΡƒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

         >>> ΠΈΠ· scipy.sparse import lil_matrix
        >>> ΠΈΠ· scipy.sparse.linalg import spsolve
        >>> ΠΈΠ· ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° numpy.linalg Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π½ΠΎΡ€ΠΌΠ°
        >>> ΠΈΠ· numpy.random import rand
         
         >>> A = lil_matrix ((1000, 1000))
        >>> A [0,: 100] = rand (100)
        >>> A [1, 100: 200] = A [0,: 100]
        >>> А.setdiag (Ρ€Π°Π½Π΄ (1000))
         

        Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ CSR ΠΈ Ρ€Π΅ΡˆΠΈΡ‚Π΅ A x = b для x:

         >>> A = A.tocsr ()
        >>> b = rand (1000)
        >>> x = spsolve (A, b)
         

        ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈ Ρ€Π΅ΡˆΠΈΡ‚Π΅, ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС:

         >>> x_ = Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (A.toarray (), b)
         

        Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π½ΠΎΡ€ΠΌΡƒ ошибки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

         >>> ошибка = Π½ΠΎΡ€ΠΌΠ° (Ρ…-Ρ…_)
        >>> эрр <1e-10
        ΠŸΡ€Π°Π²Π΄Π°
         

        Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ малСньким πŸ™‚

        ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2

        ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ COO:

         >>> ΠΈΠ· scipy import sparse
        >>> ΠΈΠ· массива ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° numpy
        >>> I = массив ([0,3,1,0])
        >>> J = массив ([0,3,1,2])
        >>> V = массив ([4,5,7,9])
        >>> А = Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹ΠΉ.coo_matrix ((V, (I, J)), shape = (4,4))
         

        ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ индСксы Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

        Π”ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ (i, j) записи ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π² CSR ΠΈΠ»ΠΈ CSC.

         >>> I = массив ([0,0,1,3,1,0,0])
        >>> J = массив ([0,2,1,3,1,0,0])
        >>> V = массив ([1,1,1,1,1,1,1])
        >>> B = sparse.coo_matrix ((V, (I, J)), shape = (4,4)). Tocsr ()
         

        Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для построСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ТСсткости ΠΈ массы ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… элСмСнтов.

        Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация

        Π˜Π½Π΄Π΅ΠΊΡΡ‹ столбцов CSR Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ отсортированы.Аналогично для строки CSC индСксы. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ .sorted_indices () ΠΈ .sort_indices (), ΠΊΠΎΠ³Π΄Π° отсортированныС индСксы ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ).

        .