πŸ”Ž Как привСсти ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΊ ступСнчатому Π²ΠΈΠ΄Ρƒ Π² 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 ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ привСсти ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Как привСсти ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΊ ступСнчатому Π²ΠΈΠ΄Ρƒ - bezbotvy

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΊ ступСнчатому Π²ΠΈΠ΄Ρƒ. Алгоритм Гаусса

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΊ ступСнчатому Π²ΠΈΠ΄Ρƒ

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ”₯ Как Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ для программирования Π½Π° Python?

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρƒ ΠΈΠ· Ρ†ΠΈΡ„Ρ€ Π½Π° Python? πŸ˜ƒπŸ”’

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ breakpoint Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅? 🐍 Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ breakpoint для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ΄Π° Π² Python?

πŸ”Ž Как привСсти ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΊ ступСнчатому Π²ΠΈΠ΄Ρƒ Π² Python?

πŸ”’ Как ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство Π±ΡƒΠΊΠ² Π² словС ΠΏΠΈΡ‚ΠΎΠ½ ΠšΠ ΠžΠœΠ• матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ πŸ‘†πŸ€”

πŸ”’ Как ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство элСмСнтов Π² строкС ΠΏΠΈΡ‚ΠΎΠ½? Π£Π·Π½Π°ΠΉ простым способом! 🐍

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»Π° Π² Python: простой ΠΈ быстрый способ