π ΠΠ°ΠΊ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ Π² Python?
ΠΠ»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ Π² Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NumPy ΠΈ ΡΡΠ½ΠΊΡΠΈΡ linalg.matrix_rank().
ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
import numpy as np
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΌΠ°ΡΡΠΈΡΡ
step_matrix = np.linalg.matrix_rank(matrix)
print(step_matrix)
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΌΠ°ΡΡΠΈΡΡ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π΅Π΅ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ np.linalg.matrix_rank(). Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ Π½Π° ΡΠΊΡΠ°Π½.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ Π² Python
Π ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΡΠΉ Π²ΠΈΠ΄ ΠΌΠ°ΡΡΠΈΡΡ - ΡΡΠΎ ΡΠΎΡΠΌΠ°, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ΅ Π½Π΅Π½ΡΠ»Π΅Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΈ Π²ΡΡΠ΅ Π½Π΅Π΅, Π° Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ΄ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΡ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ. ΠΠΎΠ³Π΄Π° ΠΌΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ Π½Π΅ΠΉ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π°Π½Π°Π»ΠΈΠ· Π΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ².
Π Python ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NumPy.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ NumPy
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° NumPy - ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ Π² Python. ΠΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NumPy, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pip install numpy
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ NumPy Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄:
import numpy as np
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ NumPy.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΌΠ°ΡΡΠΈΡΠ°:
matrix = np.array([[1, 2, 3],
[0, 4, 5],
[0, 0, 6]])
Π§ΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ np.linalg.matrix_rank()
, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ°Π½Π³ ΠΌΠ°ΡΡΠΈΡΡ. Π Π°Π½Π³ ΠΌΠ°ΡΡΠΈΡΡ - ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
ΡΡΡΠΎΠΊ (ΠΈΠ»ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ²) Π² ΠΌΠ°ΡΡΠΈΡΠ΅. ΠΡΠ»ΠΈ ΡΠ°Π½Π³ ΠΌΠ°ΡΡΠΈΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ (ΠΈΠ»ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ²), ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΡΡΠΎΠΊΠΈ (ΠΈΠ»ΠΈ ΡΡΠΎΠ»Π±ΡΡ).
Π’Π΅ΠΏΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ» for, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ°ΠΌ ΠΌΠ°ΡΡΠΈΡΡ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΡΡΠΎΠΊΡ, Π΄Π΅Π»Π°Ρ Π΅Π΅ Π³Π»Π°Π²Π½ΡΡ.
def to_row_echelon_form(matrix):
rows, cols = matrix.shape
lead = 0
for r in range(rows):
if lead >= cols:
return matrix
i = r
while matrix[i, lead] == 0:
i += 1
if i == rows:
i = r
lead += 1
if cols == lead:
return matrix
matrix[[i, r]] = matrix[[r, i]]
lv = matrix[r, lead]
matrix[r] = matrix[r] / lv
for i in range(rows):
if i != r:
lv = matrix[i, lead]
matrix[i] = matrix[i] - lv * matrix[r]
lead += 1
return matrix
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·Π²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π½Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ, ΠΈ ΠΎΠ½Π° Π²Π΅ΡΠ½Π΅Ρ Π½Π°ΠΌ ΠΌΠ°ΡΡΠΈΡΡ Π² ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌ Π²ΠΈΠ΄Π΅.
result = to_row_echelon_form(matrix)
print(result)
ΠΡΠΎΡ ΠΊΠΎΠ΄ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
[[1 2 3]
[0 1 1]
[0 0 1]]
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° Π±ΡΠ»Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ.
ΠΡΠ²ΠΎΠ΄
ΠΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΡΡΠΏΠ΅Π½ΡΠ°ΡΠΎΠΌΡ Π²ΠΈΠ΄Ρ - Π²Π°ΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΠ΅. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ NumPy Π² Python ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΠΊ ΡΠ°ΠΊΠΎΠΌΡ Π²ΠΈΠ΄Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ.