Линейная алгебра на python. [урок 3]. действия над матрицами

Содержание:

Введение в Numpy

Константы и функции numpy

np.pi Число pi
np.e Число e
np.cos Косинус
np.sin Синус
np.tan Тангенс
np.acos Арккосинус
np.asin Арксинус
np.atan Арктангенс
np.exp Экспонента
np.log Логарифм натуральный
np.log2 Логарифм по основанию 2
np.log10 Логарифм десятичный
np.sqrt x1/2
np.add, np.subtract, np.multiply, np.divide +, -, *, /
np.power(a, b) a**b
np.remainder(a, b) остаток от деления a%b
np.reciprocal(a) 1/a
np.real, np.imag, np.conj действительная часть; мнимая часть; a+bj заменяется на a-bj
np.sign знак, 1, -1 или 0
np.abs модуль
np.floor, np.ceil, np.rint преобразуем к целым числам
np.round округление с указанной точностью

Агрегации

np.mean среднее
np.std стандартное отклонение
np.var дисперсия
np.sum сумма всех элементов
np.prod произведение всех элементов
np.cumsum сумма всех элементов по указанной оси
np.cumprod произведение всех элементов по указанной оси
np.min, np.max минимальное и максимальное число в массиве
np.argmin, np.argmax индекс минимального и максимального числа в массиве
np.all True если все элементы в массиве НЕ 0
np.any True если хоть один элемент в массиве не 0
In : data = np.arange(1,10).reshape(3,3)
In : data
Out: array(,
                 ,
                 ])
In : data.sum()             
Out: 45
In : data.sum(axis=0)       
Out: array()
In : data.sum(axis=1)       
Out: array()

sort — сортировка массива

>>> a = np.array(,])
>>> np.sort(a)                
array(,
       ])
>>> np.sort(a, axis=)     
array()
>>> np.sort(a, axis=0)        
array(,
       ])

Сравнение массивов

>>> a == b                    
array(,
       ], dtype=bool)
>>> a < 2                     
array(, dtype=bool)
>>> np.array_equal(a, b)      
In : a = np.array()
In : b = np.array()
In : a < b
Out: array(, dtype=bool)

In : np.all(a < b)
Out: False
In : np.any(a < b)
Out: True
In :  np.all(a < b):
...:          ("All elements  a are smaller than their corresponding element  b")
...:       np.any(a < b):
...:          ("Some elements  a are smaller than their corresponding elemment  b")
...:      :
...:          ("All elements  b are smaller than their corresponding element  a")
Some elements  a are smaller than their corresponding elemment  b

Как заставить свою функцию работать с векторами

In :  heaviside(x):              
          ...:  1  x > 0  0
In : heaviside(-1)
Out: 0
In : heaviside(1.5)
Out: 1

In : x = np.linspace(-5, 5, 11)     
In : heaviside(x)                   
...
: The truth value of an array with more than one element  ambiguous. Use a.any()
 a.all()


In : vheaviside = np.vectorize(heaviside)     
In : vheaviside(x)                            
Out: array()

Копии и представления

При работе с массивами, их данные иногда необходимо копировать в другой массив, а иногда нет. Это часто является источником путаницы. Возможно 3 случая:

Вообще никаких копий

Простое присваивание не создает ни копии массива, ни копии его данных:

>>> a = np.arange(12)
>>> b = a  # Нового объекта создано не было
>>> b is a  # a и b это два имени для одного и того же объекта ndarray
True
>>> b.shape = (3,4)  # изменит форму a
>>> a.shape
(3, 4)

Python передает изменяемые объекты как ссылки, поэтому вызовы функций также не создают копий.

Представление или поверхностная копия

Разные объекты массивов могут использовать одни и те же данные. Метод view() создает новый объект массива, являющийся представлением тех же данных.

>>> c = a.view()
>>> c is a
False
>>> c.base is a  # c это представление данных, принадлежащих a
True
>>> c.flags.owndata
False
>>>
>>> c.shape = (2,6)  # форма а не поменяется
>>> a.shape
(3, 4)
>>> c,4 = 1234  # данные а изменятся
>>> a
array(,
       ,
       ])

Срез массива это представление:

>>> s = a = 10
>>> a
array(,
       ,
       ])

Глубокая копия

Метод copy() создаст настоящую копию массива и его данных:

>>> d = a.copy()  # создается новый объект массива с новыми данными
>>> d is a
False
>>> d.base is a  # d не имеет ничего общего с а
False
>>> d,  = 9999
>>> a
array(,
       ,
       ])

Функции, определенные для массивов¶

Алгебраические функции

Функця Описание
isreal(x) проверка на действительность (по элементам)
iscomplex(x) проверка на комплексность (по элементам)
isfinite(x) приверка элементов на числовое значение (не бесконечность и не «не число»).
isinf(x) проверка на бесконечность (по элементам)
isnan(x) проверка аргумента на «не число» (NaN), результат – логический массив
signbit(x) истина, если установлен бит знака (меньше нуля)
copysign(x1, x2) меняет знак x1 на знак x2 (по элементам
nextafter(x1, x2) следующее в направлении x2 число, представимое в виде с плавающей точкой (по элементам)
modf(x) дробная и целая часть числа
ldexp(x1, x2) вычисляет y = x1 * 2**x2.
frexp(x) разделение числа на нормированную часть и степень
absolute(x) Calculate the absolute value element-wise.
rint(x) округление элементов массива
trunc(x) отбрасывание дробной части (по элементам)
floor(x) целая часть
ceil(x) минимальное целое большее числа
sign(x) знаки элементов
conj(x) комплексное сопряжение (по элементам).
exp(x) экспонента (по элементам)
exp2(x) 2**элемент (по элементам)
log(x) натуральный логарифм (по элементам)
log2(x) двоичный логарифм (по элементам)
log10(x) десятичный логарифм (по элементам)
expm1(x) exp(x) — 1 (по элементам)
log1p(x) Return the natural logarithm of one plus the input array, element-wise.
sqrt(x) квадратный корень (для положительных) (по элементам)
square(x) квадрат (по элементам)
reciprocal(x) обратная величина (по элементам)
  • x – массив
  • out – место для результата

Тригонометрические функции

Все тригонометрические функции работают с радианами.

Функция Обратная функция Описание
sin(x) arcsin(x) синус (по элементам)
cos(x) arccos(x) косинус (по элементам)
tan(x) arctan(x) тангенс (по элементам)
  arctan2(x1, x2) арктангенс x1/x2 с правильным выбором четверти (по элементам)
hypot(x1, x2)   гипотенуза по двум катетам (по элементам)
sinh(x) arcsinh(x) гиперболический синус (по элементам)
cosh(x) arccosh(x) гиперболический косинус (по элементам)
tanh(x) arctanh(x) гиперболический тангенс (по элементам)
deg2rad(x) rad2deg(x) преобразование градусов в радианы (по элементам)
  • x, x1, x2 – массивы
  • out – место для результата

Функции двух аргументов (бинарные функции)

Для правильной работы с логическими бинарными функциям (AND, OR) необходимо явно их записывать через функции
модуля «NumPy», а не полагаться на встроенные функции питона.

Функция Описание
add(x1, x2) сумма (по элементам)
subtract(x1, x2) разность (по элементам)
multiply(x1, x2) произведение (по элементам)
divide(x1, x2) деление (по элементам)
logaddexp(x1, x2) логарифм суммы экспонент (по элементам)
logaddexp2(x1, x2) логарифм по основанию 2 от суммы экспонент (по элементам)
true_divide(x1, x2) истинное деление (с преобразованием типов)
floor_divide(x1, x2) деление без преобразования типов (целочисленное)
negative(x) обратные элементы (по элементам)
power(x1, x2) элементы первого массива в степени элементов из второго массива (по элементам)
remainder(x1, x2), mod(x1, x2), fmod(x1, x2) остаток от деления (по элементам).
greater(x1, x2) истина, если (x1 > x2) (по элементам).
greater_equal(x1, x2) истина, если (x1 > =x2) (по элементам).
less(x1, x2) истина, если (x1 < x2) (по элементам).
less_equal(x1, x2) истина, если (x1 =< x2) (по элементам).
not_equal(x1, x2) истина, если (x1 != x2) (по элементам).
equal(x1, x2) истина, если (x1 == x2) (по элементам).
logical_and(x1, x2) истина, если (x1 AND x2) (по элементам).
logical_or(x1, x2) истина, если (x1 OR x2) (по элементам).
logical_xor(x1, x2) истина, если (x1 XOR x2) (по элементам).
logical_not(x) истина, если (NOT x1) (по элементам).
maximum(x1, x2) максимум из элементов двух массивов(по элементам).
  • x1, x2 – массивы
  • out – место для результата

Бинарные функции поддерживают дополнительные методы, позволяющие накапливать значения результата различными
способами.

  • accumulate() Аккумулирование результата.
  • outer() Внешнее «произведение».
  • reduce() Сокращение.
  • reduceat() Сокращение в заданных точках.

Методы accumulate(), reduce() и reduceat() принимают необязательный аргумент — номер размерности, используемой
для соответствующего действия. По умолчанию применяется нулевая размерность.

Печать массивов

Если массив слишком большой, чтобы его печатать, NumPy автоматически скрывает центральную часть массива и выводит только его уголки.

>>> print(np.arange(, 3000, 1))

Если вам действительно нужно увидеть весь массив, используйте функцию numpy.set_printoptions:

np.set_printoptions(threshold=np.nan)

И вообще, с помощью этой функции можно настроить печать массивов «под себя». Функция numpy.set_printoptions принимает несколько аргументов:

precision : количество отображаемых цифр после запятой (по умолчанию 8).

threshold : количество элементов в массиве, вызывающее обрезание элементов (по умолчанию 1000).

edgeitems : количество элементов в начале и в конце каждой размерности массива (по умолчанию 3).

linewidth : количество символов в строке, после которых осуществляется перенос (по умолчанию 75).

suppress : если True, не печатает маленькие значения в scientific notation (по умолчанию False).

nanstr : строковое представление NaN (по умолчанию ‘nan’).

infstr : строковое представление inf (по умолчанию ‘inf’).

formatter : позволяет более тонко управлять печатью массивов. Здесь я его рассматривать не буду, можете почитать здесь (на английском).

И вообще, пользуйтесь официальной документацией по numpy, а в этом пособии я постараюсь описать всё необходимое. В следующей части мы рассмотрим базовые операции над массивами.

Подписывайтесь, чтобы не пропустить 🙂

Пакеты в SciPy

В SciPy есть набор пакетов для разных научных вычислений:

Название Описание
Алгоритмы кластерного анализа
Физические и математические константы
Быстрое преобразование Фурье
Решения интегральных и обычных дифференциальных уравнений
Интерполяция и сглаживание сплайнов
Ввод и вывод
Линейная алгебра
N-размерная обработка изображений
Метод ортогональных расстояний
Оптимизация и численное решение уравнений
Обработка сигналов
Разреженные матрицы
Разреженные и алгоритмы
Специальные функции
Статистические распределения и функции

Подробное описание можно найти в официальной документации.

Эти пакеты нужно импортировать для использования библиотеки. Например:

Прежде чем рассматривать каждую функцию в подробностях, разберемся с теми из них, которые являются одинаковыми в NumPy и SciPy.

Нам доверяют

3.1. Тригонометрические функции

Тригонометрический синус.
Тригонометрический косинус.
Тригонометрический тангенс.
Обратный тригонометрический синус.
Обратный тригонометрический косинус.
Обратный тригонометрический тангенс.
Вычисляет длинну гипотенузы по указанным длинам катетов.
Обратный тригонометрический тангенс угла где x1 — противолежащий катет, x2 — прилежащий катет. В отличие от arctan (x) функция arctan2 (y, x) справедлива для всех углов и поэтому может быть использована для преобразования вектора в угол без риска деления на ноль, а также возвращает результат в правильном квадранте.
Преобразует радианную меру угла в градусную.
Преобразует градусную меру угла в радианную.
Корректировка фазовых углов при переходе через значение pi.
Преобразует градусную меру угла в радианную.
Преобразует радианную меру угла в градусную.

3.10. Прочие математические функции

Дискретная линейная свертка.
Ограничение значений массивов указанным интервалом допустимых значений.
Квадратный корень элементов массива.
Кубический корень элементов массива.
Квадрат элементов массива.
Абсолютное значение (модуль) элементов массива.
Возвращает абсолютное значение (модуль) элементов массива в виде чисел с плавающей точкой.
Элементарный указатель на знак числа.
Ступенчатая функция Хевисайда.
Наибольшие значения после поэлементного сравнения значений массивов.
Наименьшие значения после поэлементного сравнения значений массивов.
Наибольшие значения после поэлементного сравнения значений массивов в виде чисел с плавающей точкой.
Наименьшие значения после поэлементного сравнения значений массивов в виде чисел с плавающей точкой.
Заменяет nan на 0, бесконечность и минус-бесконечность заменяются на наибольшее и наименьшее доступное число с плавающей точкой соответственно.
Переводит комплексные числа в вещественные если мнимая часть комплексного числа меньше машинной эпсилон.
Одномерная линейная интерполяция.

Ранг матрицы (в смысле линейной алгебры)

numpy.linalg.matrix_rank

In : a = (, ])

In : np.linalg.matrix_rank(a)
Out: 2

In : b = (, , ])  

In : np.linalg.matrix_rank(b)
Out: 2
 numpy as np
 numpy.linalg  inv, det, solve

a = np.array(, ])
(a)

ai = inv(a)
(ai)

Задачи

  • Определить единичную матрицу 5х5
  • Сохранить этот текст в файл. Прочитать матрицу из файла.
3,4,17,-3
5,11,-1,6
0,2,-5,8
  • Матрица задана в файле по формату
    • количество строк
    • количество столбцов
    • точность вычислений (в этой задаче не используется, но в файле дана)
    • далее матрица, как в предыдущей задаче (по строкам, через запятую)
    • Сохранить этот текст в файл. Прочитать матрицу из файла.
    • Напечатать ТОЛЬКО матрицу
    • вычислить детерминант матрицы
3
4
0.01
3,4,17,-3
5,11,-1,6
0,2,-5,8
  • Учебник по линейной алгебре
    • страница 11, номера:
      • 5 (а, б, г, д); в задаче 5а матрицу В создать через функцию zeros и присвоение потом 1 нужному элементу.
      • 9 (а, б, г, д)
      • 8 (a, в, г, д, е), — решите с помощью обратных матриц и умножения; если решения не существует, вычислите ранг и детерминант матриц
    • страница 21, номера 17 и 19 — по вариантам
19a 1 2 3
19б 4 5 6
19в 7 8 9
19г 10 11 12

ответы для самопроверки

7.5. Дискретное преобразование Фурье

Если данные в ваших массивах — это сигналы: звуки, изображения, радиоволны, котировки акций и т.д., то вам наверняка понадобится дискретное преобразование Фурье. В NumPy представлены методы быстрого дискретного преобразования Фурье для одномерных, двумерных и многомерных сигналов, а так же некоторые вспомогательные функции. Рассмотрим некоторые простые примеры.

Одномерное дискретное преобразование Фурье:

Двумерное дискретное преобразование Фурье:

Очень часто при спектральном анализе используются оконные функции (оконное преобразование Фурье), некоторые из которых так же представлены в NumPy

3.4. Суммы, разности, произведения

Произведение элементов массива по заданной оси.
Сумма элементов массива по заданной оси.
Произведение элементов массива по заданной оси в котором элементы NaN учитываются как 1.
Сумма элементов массива по заданной оси в котором элементы NaN учитываются как 0.
Возвращает накопление произведения элементов по заданной оси, т.е. массив в котором каждый элемент является произведением предшествующих ему элементов по заданной оси в исходном массиве.
Возвращает накопление суммы элементов по заданной оси, т.е. массив в котором каждый элемент является суммой предшествующих ему элементов по заданной оси в исходном массиве.
Возвращает накопление произведения элементов по заданной оси, т.е. массив в котором каждый элемент является произведением предшествующих ему элементов по заданной оси в исходном массиве. Элементы NaN в исходном массиве при произведении учитываются как 1.
Возвращает накопление суммы элементов по заданной оси, т.е. массив в котором каждый элемент является суммой предшествующих ему элементов по заданной оси в исходном массиве. Элементы NaN в исходном массиве при суммировании учитываются как 0.
Возвращает n-ю разность вдоль указанной оси.
Разность между последовательными элементами массива.
Дискретный градиент (конечные разности вдоль осей) массива .
Векторное произведение двух векторов.
Интегрирование массива вдоль указанной оси методом трапеций.

Базовые функции

Взаимодействие с NumPy

SciPy построена на базе NumPy, поэтому можно использовать функции последней для работы с массивами. Чтобы узнать о них подробнее, используйте функции , или .

help():

Функция подойдет для получения информации о любой функции. Ее можно использовать двумя способами:

  • Без параметров
  • С параметрами

Вот пример для обоих:

При исполнении этого кода, первая вернет информацию о подмодуле . А вторая — попросит пользователя ввести название модуля, ключевого слова и др., о чем требуется предоставить дополнительную информацию. Для выхода достаточно ввести и нажать Enter.

info():

Эта функция возвращает информацию о конкретных функциях, модулях и так далее.

source():

Исходный код можно получить только для тех объектов, которые были написаны на Python

Функция не вернет ничего важного, если методы или объекты были написаны, например, на C. Синтаксис простой:

Выбираем устройство загрузки

Функции (методы) для расчета статистик в Numpy

Ниже, в таблице, приведены методы объекта ndarray (или matrix), которые, как мы помним из раздела выше, могут быть также вызваны как функции библиотеки Numpy, для расчета статистик по данным массива.

Имя метода Описание
argmax Индексы элементов с максимальным значением (по осям)
argmin Индексы элементов с минимальным значением (по осям)
max Максимальные значения элементов (по осям)
min Минимальные значения элементов (по осям)
mean Средние значения элементов (по осям)
prod Произведение всех элементов (по осям)
std Стандартное отклонение (по осям)
sum Сумма всех элементов (по осям)
var Дисперсия (по осям)

Вычислим некоторые из представленных выше статистик.

>>> m.mean()
4.833333333333333
>>> m.mean(axis=1)
matrix(,
        ,
        ])
>>> m.sum()
58
>>> m.sum(axis=0)
matrix(])

Навигация по записям

Линейная алгебра

Линейная алгебра работает с линейными уравнениями и их представлениями с помощью векторных пространств и матриц. SciPy построена на базе библиотек ATLAS LAPACK и BLAS и является очень быстрой в сфере решения проблем, связанных с линейной алгеброй. В дополнение к функциям из также предоставляет набор продвинутых функций. Если не используется вместе с ATLAS LAPACK и BLAS, то работает намного быстрее.

Нахождение обратной матрицы

С математической точки зрения обратная матрица A — это матрица B, где AB = I, а I — это единичная матрица, состоящая из единиц по диагонали. Это можно обозначить как B=A-1. В SciPy такого можно добиться с помощью метода .

Пример:

Вывод:

Нахождение определителей

Значение, полученное арифметическим путем из коэффициентов матрицы является определителем квадратной матрицы. В SciPy это делается с помощью функции с таким синтаксисом:

— (M, M) — это квадратная матрица

— разрешает перезаписывать данные

— для проверки состоит ли матрица только из конечных чисел

Пример:

Вывод:

Runtastic

Как создаются матрицы в Python?

Добавление и модификация массивов или матриц (matrix) в Python осуществляется с помощью библиотеки NumPy. Вы можете создать таким образом и одномерный, и двумерный, и многомерный массив. Библиотека обладает широким набором пакетов, которые необходимы, чтобы успешно решать различные математические задачи. Она не только поддерживает создание двумерных и многомерных массивов, но обеспечивает работу однородных многомерных матриц.

Чтобы получить доступ и начать использовать функции данного пакета, его импортируют:

import numpy as np

Функция array() — один из самых простых способов, позволяющих динамически задать одно- и двумерный массив в Python. Она создаёт объект типа ndarray:

array = np.array(/* множество элементов */)

Для проверки используется функция array.type() — принимает в качестве аргумента имя массива, который был создан.

Если хотите сделать переопределение типа массива, используйте на стадии создания dtype=np.complex:

array2 = np.array([ /*элементы*/, dtype=np.complex)

Когда стоит задача задать одномерный или двумерный массив определённой длины в Python, и его значения на данном этапе неизвестны, происходит его заполнение нулями функцией zeros(). Кроме того, можно получить матрицу из единиц через функцию ones(). При этом в качестве аргументов принимают число элементов и число вложенных массивов внутри:

np.zeros(2, 2, 2) 

К примеру, так в Python происходит задание двух массивов внутри, которые по длине имеют два элемента:

array(] 
]] 
) 

Если хотите вывести одно- либо двумерный массив на экран, вам поможет функция print(). Учтите, что если матрица слишком велика для печати, NumPy скроет центральную часть и выведет лишь крайние значения. Дабы увидеть массив полностью, используется функция set_printoptions(). При этом по умолчанию выводятся не все элементы, а происходит вывод только первой тысячи. И это значение массива указывается в качестве аргумента с ключевым словом threshold.

Создание списков на Python

  • Создать список можно несколькими способами. Рассмотрим их.

1. Получение списка через присваивание конкретных значений

Так выглядит в коде Python пустой список:

s =   # Пустой список

Примеры создания списков со значениями:

l = 25, 755, -40, 57, -41   # список целых чисел
l = 1.13, 5.34, 12.63, 4.6, 34.0, 12.8   # список из дробных чисел
l = "Sveta", "Sergei", "Ivan", "Dasha"   # список из строк
l = "Москва", "Иванов", 12, 124   # смешанный список
l = , , , 1, , 1, 1, 1,    # список, состоящий из списков
l = 's', 'p', 'isok', 2 # список из значений и списка

2. Списки при помощи функции List()

Получаем список при помощи функции List()

empty_list = list() # пустой список
l = list ('spisok')  # 'spisok' - строка
print(l) # - результат - список

4. Генераторы списков

  • В python создать список можно также при помощи генераторов, — это довольно-таки новый метод:
  • Первый простой способ.

Сложение одинаковых списков заменяется умножением:

# список из 10 элементов, заполненный единицами
l = 1*10
# список l = 

Второй способ сложнее.

l = i for i in range(10)
# список l = 

или такой пример:

c = c * 3 for c in 'list'
print (c) # 

Пример:
Заполнить список квадратами чисел от 0 до 9, используя генератор списка.

Решение: 

l = i*i for i in range(10)

еще пример:

l = (i+1)+i for i in range(10)
print(l) # 

Случайные числа в списке:

from random import randint 
l = randint(10,80) for x in range(10)
# 10 чисел, сгенерированных случайным образом в диапазоне (10,80)

Задание Python 4_1:
Создайте список целых чисел от -20 до 30 (генерация).

Результат:

Задание Python 4_2:
Создайте список целых чисел от -10 до 10 с шагом 2 (генерация list).

Результат:

Задание Python 4_3:
Создайте список из 20 пятерок (генерация).

Результат:

Задание Python 4_4:
Создайте список из сумм троек чисел от 0 до 10, используя генератор списка (0 + 1 + 2, 1 + 2 + 3, …).

Результат:

Задание Python 4_5 (сложное):
Заполните массив элементами арифметической прогрессии. Её первый элемент, разность и количество элементов нужно ввести с клавиатуры.
  
* Формула для получения n-го члена прогрессии: an = a1 + (n-1) * d

Простейшие операции над списками

  • Списки можно складывать (конкатенировать) с помощью знака «+»:
l = 1, 3 + 4, 23 + 5
 
# Результат:
# l = 
33, -12, 'may' + 21, 48.5, 33 # 

или так:

a=33, -12, 'may'
b=21, 48.5, 33
print(a+b)# 

Операция повторения:

,,,1,1,1 * 2 # , , , , , ]

Пример:
Для списков операция переприсваивания значения отдельного элемента списка разрешена!:

a=3, 2, 1
a1=;
print(a) # 

Можно!

Задание 4_6:
В строке записана сумма натуральных чисел: ‘1+25+3’. Вычислите это выражение. Работать со строкой, как со списком.

Начало программы:

s=input('введите строку')
l=list(str(s));

Как узнать длину списка?

Prerequisites¶

Before reading this tutorial you should know a bit of Python. If you
would like to refresh your memory, take a look at the Python
tutorial.

If you wish to work the examples in this tutorial, you must also have
some software installed on your computer. Please see
https://scipy.org/install.html for instructions.

Learner profile

This tutorial is intended as a quick overview of
algebra and arrays in NumPy and want to understand how n-dimensional
() arrays are represented and can be manipulated. In particular, if
you don’t know how to apply common functions to n-dimensional arrays (without
using for-loops), or if you want to understand axis and shape properties for
n-dimensional arrays, this tutorial might be of help.

Learning Objectives

After this tutorial, you should be able to:

Создание, вывод и ввод матрицы в Питоне

  • Таким образом, получается структура из вложенных списков, количество которых определяет количество строк матрицы, а число элементов внутри каждого вложенного списка указывает на количество столбцов в исходной матрице.

Рассмотрим пример матрицы размера 4 х 3:

matrix = -1, , 1, 
    -1, , 1, 
    , 1, -1,
    1, 1, -1

Данный оператор можно записать в одну строку:

matrix = -1, , 1, -1, , 1, , 1, -1, 1, 1, -1

Вывод матрицы можно осуществить одним оператором, но такой простой способ не позволяет выполнять какой-то предварительной обработки элементов:

print(matrix)

Результат: 

Для вывода матрицы в виде таблицы можно использовать специально заготовленную для этого процедуру:

  1. способ:
1
2
3
4
5
def printMatrix ( matrix ): 
   for i in range ( len(matrix) ): 
      for j in range ( len(matrixi) ): 
          print ( "{:4d}".format(matrixij), end = "" ) 
      print ()

В примере i – это номер строки, а j – номер столбца;len(matrix) – число строк в матрице.

способ:

1
2
3
4
5
def printMatrix ( matrix ): 
   for row in matrix: 
      for x in row: 
          print ( "{:4d}".format(x), end = "" ) 
      print ()

Внешний цикл проходит по строкам матрицы (row), а внутренний цикл проходит по элементам каждой строки (x).

Для инициализации элементов матрицы случайными числами используется алгоритм:

1
2
3
4
5
6
import random 
for i in range(N): 
    for j in range(M): 
       matrixij = random.randint ( 30, 60 )
       print ( "{:4d}".format(matrixij), end = "" ) 
    print()
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector