Обращение к элементам матрицы
В этом случае используется сквозная нумерация элементов в столбцах.
>> a(2:3,1:2) ans = 4 5 7 8
Строки 2 и 4, столбцы 1 и 4
>> a([2,4],[1,3]) ans = 4 6 10 12
Все элементы матрицы одним столбцом (столбцы склеиваются друг за другом)
>> a(:) ans = 1 4 7 10 2 5 8 1 3 6 9 12
Заменить все элементы в 3 строке нулями
>> a(3,:) = 0 a = 1 2 3 4 5 6 0 0 0 10 1 12
Логическое индексирование
>> a = 1:10 a = 1 2 3 4 5 6 7 8 9 10
Результатом сравнения массива a с некоторым числом является логический массив единиц и нулей той же размерности, что и исходный массив, элементы которого заменяются на 1 (ИСТИНА) или 0 (ЛОЖЬ) в зависимости от результата сравнения этого элемента со сравниваемым значение (в примере ниже это число 3):
>> a > 3 ans = 1×10 logical array 0 0 0 1 1 1 1 1 1 1
Меньше или равно 3
>> a 3 ans = 1×10 logical array 1 1 1 0 0 0 0 0 0 0
Логическое индексирование можно использовать для выборки значений из матрицы, например, чтобы извлечь из матрицы a все значения, которые меньше 3 и больше 8 можно написать так
>> a(a 3 | a > 8) ans = 1 2 9 10
© 2023. All rights reserved.
click fraud protection
Матрицы — это фундаментальные структуры данных в MATLAB, которые эффективно хранят многомерные массивы и управляют ими. Создав матрицу, мы можем захотеть отобразить ее содержимое для целей визуализации или анализа. В этой статье рассматриваются различные методы отображения матрицы в MATLAB.
Набросок этой статьи таков:
- 1. Создание матрицы в MATLAB
- 2. Отображение матрицы в MATLAB
- 2.1. Отобразите матрицу Используя функцию disp
- 2.2. Отобразите матрицу Используя функцию num2str
- 3. Форматирование отображаемой матрицы
- 4. Отображение определенной строки матрицы
- 5. Отображение определенных столбцов матрицы
- 6. Отображение определенного элемента матрицы
- Заключение
1. Создание матрицы в MATLAB
Создать матрицу в MATLAB просто, нам просто нужно определить элементы матрицы в правильном порядке. Давайте создадим матрицу 3×3 с именем A:
А = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;
Матрица A теперь содержит значения от 1 до 9.
2. Отображение матрицы в MATLAB
В MATLAB мы можем отображать матрицы, используя различные методы. Два обычно используемых метода для отображения матриц в MATLAB следующие:
- 2.1. Отобразите матрицу Используя функцию disp
- 2.2. Отобразите матрицу Используя функцию num2str
2.1. Отобразите матрицу Используя функцию disp
Есть несколько способов отобразить матрицу в MATLAB. Наиболее распространенным способом является использование дисп функция. Функция disp отображает матрицу в прямоугольном формате, где каждая строка находится на новой строке.
Приведенный ниже код отобразит матрицу A с помощью функции disp():
А = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;
дисп ( А ) ;
Это выведет следующее:

2.2. Отобразите матрицу Используя функцию num2str
Другой способ отобразить матрицу — использовать num2str функция. Функция num2str преобразует матрицу в строку, которую затем можно отобразить с помощью функции disp.
Приведенный ниже код MATLAB отображает матрицу A в виде строки:
А = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;
ул = число2стр ( А ) ;
дисп ( ул ) ;
Это выведет следующее:

3. Форматирование отображаемой матрицы
Чтобы отформатировать отображаемую матрицу, вы можете использовать команду форматирования в MATLAB. Эта команда позволяет управлять форматом отображения числовых значений, таких как количество знаков после запятой или экспоненциальное представление.
Чтобы отобразить матрицу A с двумя знаками после запятой, используйте банк форматов команда в коде:
банк форматов
дисп ( А )
Вывод теперь будет:

Команда формата банка указывает MATLAB отображать числовые значения с двумя знаками после запятой. Вы можете изучить другие параметры форматирования, такие как короткий формат, длинный формат или компактный формат, в соответствии с вашими требованиями.
4. Отображение определенной строки матрицы
Иногда нам может понадобиться отобразить только определенные элементы матрицы, а не всю матрицу. MATLAB предоставляет несколько способов добиться этого. Один из подходов заключается в индексировании нужных элементов и использовании функции disp(). Отобразим только элементы первой строки матрицы A:

В этом примере А (1, выбирает все элементы в первой строке матрицы A и отображает их с помощью функции disp(). Вы можете применять аналогичные методы для отображения определенных столбцов или подмножеств элементов из матрицы.
5. Отображение определенных столбцов матрицы
Если мы хотим отобразить определенные строки или столбцы матрицы, мы можем использовать возможности индексирования MATLAB. Теперь, если мы хотим отобразить второй столбец матрицы A, запустите следующий код:

В этом случае, А(:, 2) выбирает все элементы во втором столбце матрицы A и отображает их с помощью функции disp(). Точно так же мы можем отобразить определенные строки, изменив индексацию.
6. Отображение определенного элемента матрицы
Мы также можем получить доступ к любому элементу матрицы MATLAB, указав его позицию внутри кода.
Следующий код будет отображать элементы в позиции 2-й строки и 1-го столбца в матрице A:
А = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;
элемент = А ( 2 , 1 ) ;
дисп ( элемент ) ;
Код A(2, 1) обращается к элементу во 2-й строке и 1-м столбце матрицы A и присваивает его переменному элементу. Затем функция disp() используется для отображения значения элемента. Вывод в командном окне будет 4.

Заключение
В MATLAB матрицу можно нормально отобразить с помощью функции disp(). Во-первых, мы должны определить новую матрицу внутри MATLAB. После этого мы можем получить доступ к любому элементу матрицы или строкам и столбцам, используя функцию disp(). В этой статье мы рассмотрели различные методы отображения матрицы в MATLAB. Кроме того, у нас также есть num2str функция, преобразующая матрицу в строку, которую затем можно отобразить с помощью функции disp. Подробнее об отображении матриц в MATLAB читайте в этой статье.
Как обратиться к элементу матрицы в matlab
Расположение элементов матрицы в памяти компьютера определяет еще один способ обращения к ним. Матрица А размера га на п хранится в виде вектора длины тп, в котором элементы матрицы расположены один за другим по столбцам
[А(1,1) А(2, 1) . A(m,l) ••• A(l,n) A(2,n) . A(m,n)].
Для доступа к элементам матрицы можно использовать один индекс, задающий порядковый номер элемента матрицы в векторе.
Матрица С, определенная в предыдущем подразделе, содержится в векторе
[С(1,1) С(2,1) С(1,2) С(2,2) С(1,3) С(2,3)],
который имеет шесть компонент. Доступ к элементам матрицы осуществляется следующим образом:
» С ( 1 )
ans =
» С ( 5 )
ans =
2.2. Операции над матрицами в пакете MatLab: сложение, вычитание, умножение, транспонирование и возведение в степень
При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы обязано равняться числу строк второй матрицы. Сложение и вычитание матриц, так же как чисел и векторов, осуществляется при помощи знаков плюс и минус. Найдите сумму и разность матриц С и А, определенных выше:
» S= A+C
S=
6 0 6
6 6 3
» R= С — A
R=
0 -2 8
2 -2 -3
Следите за совпадением размерности, иначе получите сообщение об ошибке:
» S = А+В
. Error using ==> ±

studopedia.org — Студопедия.Орг — 2014-2022 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.015 с) .
Matlab обращение к элементу матрицы
1. Матрица строка. Указывается переменная, ставится знак присвоения и в квадратных скобках через запятую или пробел перечисляются элементы:
2. Матрица столбец. В качестве разделителя элементов применяется символ «;»:
3. Квадратная или прямоугольная матрица:
>> C = [5 6 9; 56 45 73; 15,21,36];
4. Генерация вектора. Синтаксис: = : : . Если не указать шаг, то по умолчанию он принимается за 1.
5. Единичная матрица. Синтаксис: =ones( , ).
6. Нулевая матрица. Синтаксис: =zeros( , );
Доступ к ячейкам матрицы. Синтаксис: ( , ). Необходимо помнить, что нумерация строк и столбцов начинается с 1.
Операции с матрицами:
1. Скалярные операции. Умножение и деление матрицы на число, а также сложение и вычитание матрицы и числа (скаляр) – «.*», «./»,«.+», «.–». Каждая скалярная операция выполняются с каждой ячейкой матрицы отдельно. Любая скалярная (поэлементная) операция, то есть операция сразу над всем массивом, в MatLab обозначаются при помощи точки.
2. Сложение и вычитание матриц. Данная операция выполнима только с матрицами одинакового размера. При выполнении операции действие выполняется с соответствующими друг другу ячейками.
3. Произведение матриц. Производится последовательное умножение строки первой матрицы на столбец второй. Для реализации данной операции необходимо выполнение условия (количество строк первой матрицы ровно количеству столбцов во второй матрице). Матрица результата будет иметь столько же строк сколько и в первой матрице, и количество столбцов равное количеству столбцов во второй матрице.
4. Удаление отдельных столбцов или строк. Для удаления отдельных столбцов или строк матрицы используются: пустые квадратные скобки [] и оператор двоеточие (:).
>> C = [24 33 42; 34 47 60; 44 61 78]
В.Г.Потемкин «Введение в Matlab» (v 5.3)
Глава 3. Программирование в среде Matlab 5
3.5. Индексы и подындексы
Индексы. Элемент массива А, расположенный на пересечении строки i и столбца j, обозначается как А(i, j).
Пример
Рассмотрим в качестве массива А матрицу magic(4):
А = magic(4)
А =
| 16 | 2 | 3 | 13 |
| 5 | 11 | 10 | 8 |
| 9 | 7 | 6 | 12 |
| 4 | 14 | 15 | 1 |
Тогда А(4, 3) — это элемент, расположенный на пересечении строки 4 и столбца 3, равный 15.
Можно также вычислить сумму элементов четвертого столбца
A(1, 4) + A(2, 4) + A(3, 4) + A(4, 4)
ans = 34
На элементы массива А можно ссылаться, используя единственный индекс, А(k). Это обычный способ ссылки на элементы векторов. Но точно так же можно ссылаться на элементы двумерного массива, и в этом случае этот массив рассматривается как один длинный вектор-столбец, сформированный из столбцов исходного массива. В рассматриваемом примере А(12) — это другой способ ссылки на значение 15, соответствующее элементу А(4, 3).
Если будет сделана попытка обратиться к элементу вне матрицы, то программа выдаст ошибку:
t = A(4, 5)
. Index exceeds matrix dimensions. Индекс превышает размерность матрицы.
Если же выполняется присвоение значения элементу с индексами, выходящими за пределы массива, то система MATLAB автоматически увеличивает размер матрицы.
Пример:
X = A;
X (4, 5) = 17
X =
| 16 | 2 | 3 | 13 | |
| 5 | 11 | 10 | 8 | |
| 9 | 7 | 6 | 12 | |
| 4 | 14 | 15 | 1 | 17 |
Выделение подблоков массива. Если в индексных выражениях использовать двоеточие, то можно ссылаться на подблоки массива. Так индексное выражение A(1:k, j) ссылается на блок из k элементов столбца j.
Пример:
A(1:4,3)
ans =
| 3 |
| 10 |
| 6 |
| 15 |
Здесь выделен столбец 3 матрицы magic(4).
sum(A(1:4, 3))
ans = 34
вычисляет сумму элементов столбца 3.
Однако существует способ лучше. Поскольку двоеточие само по себе ссылается на все элементы строки или столбца, то последнюю сумму можно вычислить так
sum(A(:,3))
ans = 34
Кроме того, начиная с версии 5.0, на последнюю строку или столбец массива можно ссылаться с помощью ключевого слова end. Таким образом, оператор
sum(A(:, end))
ans = 34
вычисляет сумму элементов в последнего столбца матрицы A.
Объдинение подблоков в массив. Операция объединения отдельных подблоков в массив называется конкатенацией. Даже при формировании исходной матрицу, когда объдиняются отдельные элементы, осуществляется операция конкатенации.Оператор конкатенации — это пара квадратных скобок [ ], внутри которых указываются отдельные элементы или блоки массива.
Пример.
Используя матрицу A, равную magic(4), образуем новую матрицу B размера 8×8
B = [A A+32; A+48 A+16]
B =
| 16 | 2 | 3 | 13 | 48 | 34 | 35 | 45 |
| 5 | 11 | 10 | 8 | 37 | 43 | 42 | 40 |
| 9 | 7 | 6 | 12 | 41 | 39 | 38 | 44 |
| 4 | 14 | 15 | 1 | 36 | 46 | 47 | 33 |
| 64 | 50 | 51 | 61 | 32 | 18 | 19 | 29 |
| 53 | 59 | 58 | 56 | 21 | 27 | 26 | 24 |
| 57 | 55 | 54 | 60 | 25 | 23 | 22 | 28 |
| 52 | 62 | 63 | 49 | 20 | 30 | 31 | 17 |
Эта матрица состоит из четырех блоков размера 4×4
| 16 | 3 | 2 | 13 |
| 5 | 10 | 11 | 8 |
| 9 | 6 | 7 | 12 |
| 4 | 15 | 14 | 1 |
Эта матрица есть половина другого волшебного квадрата, элементы которого находятся в диапазоне целых чисел 1:64. Суммы по столбцам уже имеют правильное значение для волшебного квадрата размера 8х8:
sum(B)
ans = 260 260 260 260 260 260 260 260
Однако сумма строк
sum (B’)
ans = 196 196 196 196 324 324 324 324
Попробуйте найти те перестановки элементов, которые приводят матрицу B к истинному волшебному квадрату порядка 8.
Удаление строк и столбцов. Используя понятие пустого массива, можно легко удалять строки, столбцы и целые подблоки.
X = A
X =
| 16 | 2 | 3 | 13 |
| 5 | 11 | 10 | 8 |
| 9 | 7 | 6 | 12 |
| 4 | 14 | 15 | 1 |
Чтобы удалить второй столбец массива X достаточно применить оператор
X (:, 2) = [ ]
X =
| 16 | 3 | 13 |
| 5 | 10 | 8 |
| 9 | 6 | 12 |
| 4 | 15 | 1 |
При попытке улалить отдельный элемент массива возникает ошибка, поскольку результат не является массивом:
X (1, 2) = []
. Indexed empty matrix assignment is not allowed.
Запрещено присвоение пустой матрицы индексному выражению.
Однако использование единственного индекса позволяет удалить одиночный элемент или последовательность элементов, при этом остающиеся элементы преобразуются в вектор-строку.
X = A;
X(:, 2) = [ ]
X =
| 16 | 3 | 13 |
| 5 | 10 | 8 |
| 9 | 6 | 12 |
| 4 | 15 | 1 |
X(2:1:12) = [ ]
X = 16
или
X = A;
X(:, 2) = [ ]
X =
| 16 | 3 | 13 |
| 5 | 10 | 8 |
| 9 | 6 | 12 |
| 4 | 15 | 1 |
X(2 : 2 : 10) = [ ]
X = 16 9 3 6 13 12 1
Индексация многомерных массивов. В системе MATLAB принято хранить каждый массив, независимо от его размерности, как вектор-столбец. Этот вектор образован объединением (конкатенацией) столбцов исходного массива.
Пример.
Система MATLAB хранит массив A
A = [2 6 9; 4 2 8; 3 0 1]
в виде следующего вектора-столбца
| 2 |
| 4 |
| 3 |
| 6 |
| 2 |
| 9 |
| 8 |
| 1 |
При обращении к массиву А с указанием единственного индекса происходит непосредственное обращение к этому вектору-столбцу. Обращение A(3) ссылается на третье значение в столбце; А(7) — на седьмое и так далее.
Если количество индексов массива больше 1, то MATLAB вычисляет индекс в столбце хранения, используя значения размерностей массива. Если двумерный массив А имеет размер [d1 d2], где d1 — число строк, а d2 — число столбцов, то для элемента с номером (i, j) его позиция в векторе хранения определяется как (j-1)*d1+i.
Пример
Для элемента A(3, 2) MATLAB вычисляет следующую позицию в векторе хранения (2-1)*3+3 = 6. Элементу с номером 6 соответствует значение 0.
Этот способ хранения и индексная схема распространяются и на многомерные массивы. В этом случае MATLAB использует схему постраничного объединения, чтобы создать столбец хранения.
Использование единственного индекса приводит к непосредственному обращению к вектору хранения.
Если задано два индекса (i, j), то MATLAB вычисляет позицию описанным выше способом, причем только для первой страницы многомерного массива и при условии, что эти индексы находятся внутри диапазона размерностей исходного массива.
Если задано более двух индексов, схему индексации усложняется. Если задано четыре индекса (i, j, k, l) для четырехмерного массиву размера d1xd2xd3xd4, то позиция элемента в векторе хранения вычисляется следующим образом
s = (l-1)(d3)(d2)(d1)+(k-1)(d2)(d1)+(j-1)(d1)+i.
Общая формула для позиции элемента в векторе хранения, соответствующего элементу (j1 j2 . jn-1 jn) n-мерного массива размера d1xd2xd3x . xdn, имеет вид
s = (jn-1)(dn-1)(dn-2). (d1)+(jn-1-1)(dn-2). (d1)+. +(j2-1)(d1)+j1.
Пример
Рассмотрим многомерный массив C размера 5х4х3х2. На рис. 3.2 показаны форматы вывода на экран и хранения.
пример
MATLAB позволяет несколько методов индексировать (получать доступ) элементы матриц и массивов:
- Индексация индексов — где вы указываете позицию элементов, которые вы хотите в каждом измерении матрицы, отдельно.
- Линейное индексирование — где матрица рассматривается как вектор, независимо от ее размеров. Это означает, что вы указываете каждую позицию в матрице с одним номером.
- Логическая индексация — где вы используете логическую матрицу (и матрицу true и false значений) с одинаковыми размерами матрицы, которую вы пытаетесь индексировать в качестве маски, чтобы указать, какое значение нужно вернуть.
Эти три метода теперь описано более подробно с помощью следующего 3 на 3 матрицы M в качестве примера:
Индексация индексов
Самый простой способ доступа к элементу — указать его индекс столбца строки. Например, доступ к элементу во второй строке и третьем столбце:
Количество предоставленных индексов точно соответствует числу размеров M (два в этом примере).
Обратите внимание, что порядок индексов совпадает с порядком математического соглашения: индекс строки является первым. Более того, индексы MATLAB начинаются с 1 а не 0 как большинство языков программирования.
Вы можете индексировать сразу несколько элементов, передавая вектор для каждой координаты вместо одного числа. Например, чтобы получить всю вторую строку, мы можем указать, что нам нужны первый, второй и третий столбцы:
В MATLAB вектор [1,2,3] легче создать с помощью оператора двоеточия, т. Е. 1:3 . Вы можете использовать это и в индексировании. Чтобы выбрать целую строку (или столбец), MATLAB предоставляет ярлык, позволяя вам просто указать : Например, следующий код также вернет всю вторую строку
MATLAB также предоставляет ярлык для указания последнего элемента измерения в форме ключевого слова end . Ключевое слово end будет работать точно так же, как если бы это был номер последнего элемента в этом измерении. Поэтому, если вы хотите, чтобы все столбцы от столбца 2 до последнего столбца, вы можете использовать следующее:
Индексация индексирования может быть ограничительной, поскольку она не позволит извлекать отдельные значения из разных столбцов и строк; он будет извлекать комбинацию всех строк и столбцов.
Например, индексирование индексов не может извлекать только элементы M(2,1) или M(3,3) . Для этого мы должны рассмотреть линейную индексацию.
Линейная индексация
MATLAB позволяет обрабатывать n-мерные массивы как одномерные массивы при индексировании с использованием только одного измерения. Вы можете напрямую получить доступ к первому элементу:
Обратите внимание, что массивы хранятся в основном порядке в MATLAB, что означает, что вы получаете доступ к элементам, сначала спустившись по столбцам. Таким образом, M(2) является вторым элементом первого столбца, который равен 3 а M(4) будет первым элементом второго столбца, т.е.
Существуют встроенные функции в MATLAB для преобразования индексов индексов в линейные индексы и наоборот: sub2ind и ind2sub соответственно. Вы можете вручную преобразовать индексы ( r , c ) в линейный индекс на
Чтобы понять это, если мы находимся в первом столбце, линейный индекс будет просто индексом строки. Вышеприведенная формула верна для этого, поскольку для c == 1 , (c-1) == 0 . В следующих столбцах линейный индекс — это номер строки и все строки предыдущих столбцов.
Обратите внимание, что ключевое слово end прежнему применяется и теперь относится к самому последнему элементу массива, т.е. M(end) == M(end, end) == 2 .
Вы также можете индексировать несколько элементов с помощью линейной индексации. Обратите внимание: если вы это сделаете, возвращаемая матрица будет иметь ту же форму, что и матрица индексных векторов.
M(2:4) возвращает вектор строки, потому что 2:4 представляет вектор строки [2,3,4] :
В качестве другого примера M([1,2;3,4]) возвращает матрицу 2 на 2, потому что [1,2;3,4] является матрицей 2 на 2. Посмотрите приведенный ниже код, чтобы убедить себя:
Обратите внимание, что индексирование с помощью : alone всегда будет возвращать вектор-столбец:
Этот пример также иллюстрирует порядок, в котором MATLAB возвращает элементы при использовании линейной индексации.
Логическая индексация
Третий метод индексирования — использовать логическую матрицу, т. Е. Матрицу, содержащую только true или false значения, в качестве маски для фильтрации элементов, которые вы не хотите. Например, если мы хотим найти все элементы M , которые больше 5 мы можем использовать логическую матрицу
для индекса M и возвращать только значения, превышающие 5 следующим образом:
Если вы хотите, чтобы этот номер оставался на месте (т. Е. Сохранял форму матрицы), тогда вы могли бы назначить логический комплимент
Мы можем уменьшить сложные кодовые блоки, содержащие операторы if и for , используя логическую индексацию.
Возьмите не-векторизованный (уже сокращенный до одного цикла с помощью линейной индексации):
Это можно сократить до следующего кода, используя логическую индексацию:
Или даже короче:
Подробнее об индексировании
Более высокие размерные матрицы
Все упомянутые выше методы обобщаются на n-мерные. Если мы используем в качестве примера трехмерную матрицу M3 = rand(3,3,3) , то вы можете получить доступ ко всем строкам и столбцам второго среза третьего измерения, написав
Вы можете получить доступ к первому элементу второго среза с помощью линейной индексации. Линейное индексирование будет двигаться только ко второму срезу после всех строк и всех столбцов первого среза. Таким образом, линейный индекс для этого элемента равен
Фактически, в MATLAB каждая матрица n-мерна: просто случается так, что размер большинства других n-измерений один. Итак, если a = 2 то a(1) == 2 (как и следовало ожидать), но также a(1, 1) == 2 , как и a(1, 1, 1) == 2 , a(1, 1, 1, . 1) == 2 и т. Д. Эти «дополнительные» размеры (размером 1 ) называются одноэлементными размерами . squeeze команды удалит их, и можно использовать permute чтобы поменять порядок размеров вокруг (и при необходимости ввести размеры синглтона).
N-мерную матрицу можно также индексировать, используя m индексов (где m M(1,1) и M(2,3) но также вернет M(1,3) и M(2,1) . Это может показаться неинтуитивными , когда вы ищете элементы для списка пар координат , но рассмотрим пример большей матрицы A = rand(20) (заметим , теперь A 20 матрицу с размерностью 20 ), где вы хотите получить верхний правый квадрант. В этом случае вместо того, чтобы указывать каждую пару координат в этом квадранте (и этот случай равен 100 парам), вы просто указываете 10 строк и 10 столбцов, которые вы хотите, так что A(1:10, 11:end) . Нарезка такой матрицы гораздо более распространена, чем запрос списка пар координат.
В случае, если вы хотите получить список пар координат, самым простым решением является преобразование в линейную индексацию. Рассмотрим проблему, в которой у вас есть вектор индексов столбцов, который вы хотите вернуть, где каждая строка вектора содержит номер столбца, который вы хотите вернуть для соответствующей строки матрицы. Например
Поэтому в этом случае вы действительно хотите вернуть элементы в (1,3) , (2,2) и (3,1) . Таким образом, используя линейное индексирование:
Возвращение элемента несколько раз
С индексом и линейной индексацией вы также можете вернуть элемент несколько раз, повторяя его индекс так
Вы можете использовать это, чтобы дублировать целые строки и столбец, например, чтобы повторить первую строку и последний столбец
Matlab обращение к элементу матрицы
Как я могу применить функцию к каждой строке / столбцу матрицы в MATLAB?
Вы можете применить функцию к каждому элементу в векторе, сказав, например, v + 1 , или вы можете использовать функцию arrayfun . Как я могу сделать это для каждой строки/столбца матрицы без использования цикла for?
11 ответов:
многие встроенные операции, такие как sum и prod уже могут работать через строки или столбцы, так что вы можете быть в состоянии рефакторинга функции, которую вы применяете, чтобы воспользоваться этим.
если это не жизнеспособный вариант, один из способов сделать это-собрать строки или столбцы в ячейки с помощью mat2cell или num2cell , а затем использовать cellfun для работы с результирующей ячейкой матрица.
в качестве примера предположим, что вы хотите суммировать столбцы матрицы M . Вы можете сделать это просто с помощью sum :
и вот как бы вы это сделали, используя более сложные num2cell / cellfun :
вы можете захотеть более неясную функцию Matlab bsxfun. Из документации Matlab bsxfun » применяет поэлементную двоичную операцию, заданную функцией handle fun, к массивам A и B с включенным одноэлементным расширением.»
@gnovice указано выше, что sum и другие основные функции уже работают на Первом не одноэлементном измерении (т. е. строки, если есть более одной строки, столбцы, если есть только одна строка, или более высокие измерения, если нижняя размеры все Размер==1). Однако bsxfun работает для любой функции, включая (и особенно) пользовательские функции.
например, предположим, что у вас есть матрица A и вектор строки B. Например, скажем:
вы хотите функцию power_by_col, которая возвращает в векторе C все элементы в A в степень соответствующего столбца B.
из приведенного выше примера, C является матрицей 3×3:
вы могли бы сделать это грубой силой, используя repmat:
или вы можете сделать это классным способом, используя bsxfun, который внутренне заботится о шаге repmat:
таким образом, bsxfun сохраняет некоторые шаги (вам не нужно явно вычислять размеры A). Однако в некоторых моих неофициальных тестах оказывается, что repmat примерно в два раза быстрее, если применяемая функция (например, моя функция мощности, выше) проста. Так что вам нужно выбрать, хотите ли вы простота или скорость.
Я не могу прокомментировать, насколько это эффективно, но вот решение:
дом на Алекс, вот более общая функция:
вот сравнение между двумя функциями:
для полноты / интереса я хотел бы добавить, что matlab имеет функцию, которая позволяет вам работать с данными на строку, а не на элемент. Она называется rowfun (http://www.mathworks.se/help/matlab/ref/rowfun.html), но единственная «проблема» в том, что он работает на таблицы (http://www.mathworks.se/help/matlab/ref/table.html), а не матрицы.
добавляя к развивающемуся характеру ответа на этот вопрос, начиная с r2016b, MATLAB будет неявно расширять одноэлементные измерения, устраняя необходимость bsxfun во многих случаях.
неявное расширение: применение поэлементных операций и функций к массивам с автоматическим расширением размеров длины 1
неявное расширение является обобщением скалярного расширения. С скалярное расширение, скаляр расширяется до того же размера, что и другой массив для облегчения поэлементных операций. С неявным расширением, перечисленные здесь поэлементные операторы и функции могут неявно разверните их входы, чтобы они были одинакового размера, если массивы имеют совместимые размеры. Два массива имеют совместимые размеры, если для каждого размер, размеры размеров входных сигналов или эти же или один из них 1. См. раздел совместимые размеры массива для основных операций и Массив и Матричные операции для получения дополнительной информации.
например, вы можете вычислить среднее значение каждого столбца в матрице A, а затем вычесть вектор средних значений в каждом столбце с — среднее(а).
ранее эта функция была доступна через функцию bsxfun. Теперь рекомендуется заменить большинство применений bsxfun на прямые вызовы функций и операторов, поддерживающих неявное расширение. По сравнению с использованием bsxfun, неявный расширение предлагает более быструю скорость, лучшее использование памяти и улучшенная читаемость кода.
в последних версиях Matlab вы можете использовать структуру данных таблицы в своих интересах. Есть даже операция «rowfun», но мне было проще просто сделать это:
или вот более старый, который у меня был, который не требует таблиц, для более старых версий Matlab.
Принятый ответ, похоже, заключается в том, чтобы сначала преобразовать в ячейки, а затем использовать cellfun для работы над всеми ячейками. Я не знаю конкретного приложения, но в целом я бы подумал, используя bsxfun работать над Матрицей было бы более эффективно. В основном bsxfun применяет операцию элемент за элементом в двух массивах. Так что если вы хотите умножить каждый элемент в n x 1 вектор по каждому элементу в m x 1 вектор, чтобы получить n x m массив, вы могли бы использование:
это даст вам матрицу под названием result где запись (i, j) будет i-м элементом vec1 умножается на j-й элемент vec2 .
можно использовать bsxfun для всех видов встроенных функций, и вы можете объявить свои собственные. В документации есть список многих встроенных функций, но в основном вы можете назвать любую функцию, которая принимает два массива (вектор или матрицу) в качестве аргументов и заставить ее работать.
ни один из вышеперечисленных ответов не сработал «из коробки» для меня, однако, работает следующая функция, полученная путем копирования идей других ответов:
Он принимает функцию f и применяет его к каждому столбцу матрицы M .
наткнулся на этот вопрос / ответ, ища, как вычислить суммы строк матрицы.
Я просто хотел бы добавить, что функция суммы Matlab фактически поддерживает суммирование для данного измерения, т. е. стандартную матрицу с двумя измерениями.
Итак, чтобы вычислить суммы столбцов, сделайте:
и для сумм строк, просто сделать
моя ставка заключается в том, что это быстрее, чем программирование цикла for и преобразование в ячейки
все это можно найти в справке matlab для SUM.
MATLAB Language Матрицы индексирования и массивы
пример
MATLAB позволяет несколько методов индексировать (получать доступ) элементы матриц и массивов:
- Индексация индексов — где вы указываете позицию элементов, которые вы хотите в каждом измерении матрицы, отдельно.
- Линейное индексирование — где матрица рассматривается как вектор, независимо от ее размеров. Это означает, что вы указываете каждую позицию в матрице с одним номером.
- Логическая индексация — где вы используете логическую матрицу (и матрицу true и false значений) с одинаковыми размерами матрицы, которую вы пытаетесь индексировать в качестве маски, чтобы указать, какое значение нужно вернуть.
Эти три метода теперь описано более подробно с помощью следующего 3 на 3 матрицы M в качестве примера:
Индексация индексов
Самый простой способ доступа к элементу — указать его индекс столбца строки. Например, доступ к элементу во второй строке и третьем столбце:
Количество предоставленных индексов точно соответствует числу размеров M (два в этом примере).
Обратите внимание, что порядок индексов совпадает с порядком математического соглашения: индекс строки является первым. Более того, индексы MATLAB начинаются с 1 а не 0 как большинство языков программирования.
Вы можете индексировать сразу несколько элементов, передавая вектор для каждой координаты вместо одного числа. Например, чтобы получить всю вторую строку, мы можем указать, что нам нужны первый, второй и третий столбцы:
В MATLAB вектор [1,2,3] легче создать с помощью оператора двоеточия, т. Е. 1:3 . Вы можете использовать это и в индексировании. Чтобы выбрать целую строку (или столбец), MATLAB предоставляет ярлык, позволяя вам просто указать : Например, следующий код также вернет всю вторую строку
MATLAB также предоставляет ярлык для указания последнего элемента измерения в форме ключевого слова end . Ключевое слово end будет работать точно так же, как если бы это был номер последнего элемента в этом измерении. Поэтому, если вы хотите, чтобы все столбцы от столбца 2 до последнего столбца, вы можете использовать следующее:
Индексация индексирования может быть ограничительной, поскольку она не позволит извлекать отдельные значения из разных столбцов и строк; он будет извлекать комбинацию всех строк и столбцов.
Например, индексирование индексов не может извлекать только элементы M(2,1) или M(3,3) . Для этого мы должны рассмотреть линейную индексацию.
Линейная индексация
MATLAB позволяет обрабатывать n-мерные массивы как одномерные массивы при индексировании с использованием только одного измерения. Вы можете напрямую получить доступ к первому элементу:
Обратите внимание, что массивы хранятся в основном порядке в MATLAB, что означает, что вы получаете доступ к элементам, сначала спустившись по столбцам. Таким образом, M(2) является вторым элементом первого столбца, который равен 3 а M(4) будет первым элементом второго столбца, т.е.
Существуют встроенные функции в MATLAB для преобразования индексов индексов в линейные индексы и наоборот: sub2ind и ind2sub соответственно. Вы можете вручную преобразовать индексы ( r , c ) в линейный индекс на
Чтобы понять это, если мы находимся в первом столбце, линейный индекс будет просто индексом строки. Вышеприведенная формула верна для этого, поскольку для c == 1 , (c-1) == 0 . В следующих столбцах линейный индекс — это номер строки и все строки предыдущих столбцов.
Обратите внимание, что ключевое слово end прежнему применяется и теперь относится к самому последнему элементу массива, т.е. M(end) == M(end, end) == 2 .
Вы также можете индексировать несколько элементов с помощью линейной индексации. Обратите внимание: если вы это сделаете, возвращаемая матрица будет иметь ту же форму, что и матрица индексных векторов.
M(2:4) возвращает вектор строки, потому что 2:4 представляет вектор строки [2,3,4] :
В качестве другого примера M([1,2;3,4]) возвращает матрицу 2 на 2, потому что [1,2;3,4] является матрицей 2 на 2. Посмотрите приведенный ниже код, чтобы убедить себя:
Обратите внимание, что индексирование с помощью : alone всегда будет возвращать вектор-столбец:
Этот пример также иллюстрирует порядок, в котором MATLAB возвращает элементы при использовании линейной индексации.
Логическая индексация
Третий метод индексирования — использовать логическую матрицу, т. Е. Матрицу, содержащую только true или false значения, в качестве маски для фильтрации элементов, которые вы не хотите. Например, если мы хотим найти все элементы M , которые больше 5 мы можем использовать логическую матрицу
для индекса M и возвращать только значения, превышающие 5 следующим образом:
Если вы хотите, чтобы этот номер оставался на месте (т. Е. Сохранял форму матрицы), тогда вы могли бы назначить логический комплимент
Мы можем уменьшить сложные кодовые блоки, содержащие операторы if и for , используя логическую индексацию.
Возьмите не-векторизованный (уже сокращенный до одного цикла с помощью линейной индексации):
Это можно сократить до следующего кода, используя логическую индексацию:
Или даже короче:
Подробнее об индексировании
Более высокие размерные матрицы
Все упомянутые выше методы обобщаются на n-мерные. Если мы используем в качестве примера трехмерную матрицу M3 = rand(3,3,3) , то вы можете получить доступ ко всем строкам и столбцам второго среза третьего измерения, написав
Вы можете получить доступ к первому элементу второго среза с помощью линейной индексации. Линейное индексирование будет двигаться только ко второму срезу после всех строк и всех столбцов первого среза. Таким образом, линейный индекс для этого элемента равен
Фактически, в MATLAB каждая матрица n-мерна: просто случается так, что размер большинства других n-измерений один. Итак, если a = 2 то a(1) == 2 (как и следовало ожидать), но также a(1, 1) == 2 , как и a(1, 1, 1) == 2 , a(1, 1, 1, . 1) == 2 и т. Д. Эти «дополнительные» размеры (размером 1 ) называются одноэлементными размерами . squeeze команды удалит их, и можно использовать permute чтобы поменять порядок размеров вокруг (и при необходимости ввести размеры синглтона).
N-мерную матрицу можно также индексировать, используя m индексов (где m M(1,1) и M(2,3) но также вернет M(1,3) и M(2,1) . Это может показаться неинтуитивными , когда вы ищете элементы для списка пар координат , но рассмотрим пример большей матрицы A = rand(20) (заметим , теперь A 20 матрицу с размерностью 20 ), где вы хотите получить верхний правый квадрант. В этом случае вместо того, чтобы указывать каждую пару координат в этом квадранте (и этот случай равен 100 парам), вы просто указываете 10 строк и 10 столбцов, которые вы хотите, так что A(1:10, 11:end) . Нарезка такой матрицы гораздо более распространена, чем запрос списка пар координат.
В случае, если вы хотите получить список пар координат, самым простым решением является преобразование в линейную индексацию. Рассмотрим проблему, в которой у вас есть вектор индексов столбцов, который вы хотите вернуть, где каждая строка вектора содержит номер столбца, который вы хотите вернуть для соответствующей строки матрицы. Например
Поэтому в этом случае вы действительно хотите вернуть элементы в (1,3) , (2,2) и (3,1) . Таким образом, используя линейное индексирование:
Возвращение элемента несколько раз
С индексом и линейной индексацией вы также можете вернуть элемент несколько раз, повторяя его индекс так
Вы можете использовать это, чтобы дублировать целые строки и столбец, например, чтобы повторить первую строку и последний столбец
Для получения дополнительной информации см. Здесь .
Векторы и матрицы При работе в MATLAB необходимо учитывать две существенные особенности реализации арифметических вычислений в этой системе.
Транскрипт
1 Векторы и матрицы При работе в MATLAB необходимо учитывать две существенные особенности реализации арифметических вычислений в этой системе. Вопервых, в MATLAB все скалярные переменные трактуются, как массивы размера 1 1. Действительно, если присвоить значения переменным и с помощью команды whos вывести в командное окно информацию об этих переменных, то можно увидеть, что скалярные переменные рассматриваются системой MATLAB как одноэлементные векторы различного типа и с различными атрибутами. >> a = 1; >> b = 3.14; >> c = 3 > 2; >> d = ‘a’; >> e = ‘qwer’; >> f = 7-3i; >> [; 4 5 6]; >> whos Name Size Bytes Class Attributes A 2×3 48 double a 1×1 8 double b 1×1 8 double c 1×1 1 logical d 1×1 2 char e 1×4 8 char f 1×1 16 double complex Кроме того, при выполнении операций MATLAB стремится, насколько это возможно, выполнить приведение операндов к одному размеру. Поэтому особенностью арифметики MATLAB является возможность, наряду со стандартной операцией умножения массива на скаляр, выполнить сложение или вычитание массива и скаляра. Скаляр в этом случае автоматически
2 преобразуется в массив, размер которого совпадает с размером соседнего операнда, а все элементы равны исходному скаляру. Для ввода массивов (векторов или матриц) их элементы заключают в квадратные скобки. При вводе вектора-столбца элементы разделяют точкой с запятой. При вводе вектора-строки элементы разделяются запятой. Вводить небольшие по размеру матрицы удобно прямо из командной строки. При вводе матрицу можно рассматривать как вектор-столбец, каждый элемент которого является вектор-строкой. Доступ к элементам матриц осуществляется при помощи двух индексов номеров строки и столбца, заключенных в круглые скобки, например команда P(2,3) выдаст элемент второй строки и третьего столбца матрицы с именем P. Для выделения из матрицы столбца или строки следует в качестве одного из индексов использовать номер столбца или строки матрицы, а другой индекс заменить двоеточием. >> P = [] P = >> P = [1; 2; 3] P = >> [; 4 5 6; ] Если элементы вектора являются арифметической прогрессией, то можно задать вектор так: имя_вектора = начальное_значение: шаг: конечное_значение.
3 >> X = 0:0.5:pi X = Если шаг равен единице, то его можно не указывать: >> Y = 0:12 Y = Для формирования арифметической прогрессии можно использовать функцию linspace: linspace(начальное_значение, конечное_значение, количество_значений) >> Z = linspace(0,pi,8) Z = Для определения длины вектора предназначена функция length: >> length(z) 8 Вектор можно задать путем объединения нескольких векторов. >> F = [] F = >> H = [ ] H = >> [F H] Для доступа к элементу вектора необходимо указать его имя и в круглых скобках номер элемента. >> d = D(5) d =
4 5 Для обращения к последнему элементу вектора можно записать: >> d = D(length(D)) d = 7 или >> d = D(end) d = 7 Также можно осуществлять выделение блоков матриц при помощи двоеточия. >> [; 4 5 6; ] Если двоеточие стоит вместо номера строки или столбца, то соответственно выделяются строка или столбец. >> A(:,3) Получим третью строку матрицы А: >> A(3, Получим вектор-столбец из всех элементов матрицы: >> A(:) 1
5 Получим матрицу, состоящую из элементов матрицы А, начиная со второго столбца: >> B=A(:, 2:end) Поменяем местами первую и последнюю строки матрицы А: >> B=A(1,:) >> A(1,:)=A(end,:) >> A(end,:)=B Второй вариант обмена выглядит так: >> A([1 3],:) = A([3 1],:)
6 4 5 6 Получим вектор, состоящий из элементов первых трех элементов второго столбца матрицы А. >> A(1:3,2) Выделим из матрицы квадратную матрицу: >> A(2:3, 2:3) Выделим первые две строки матрицы А: >> A(1:2,:) Чтобы заменить один фрагмент матрицы другим. Заменим правый верхний угол матрицы А матрицей В. >> [10 20; 30 40] >> A (1:2, 1:2) = B
7 Индексация двоеточием упрощает формирование матриц по определенному закону. Пусть необходимо сформировать матрицу размером 5х5, в которой элементы первой и последней строк и первого и последнего столбца равны 1. Остальные элементы равны 0. >> D(1:5, 1:5) = 0 >> D(1,:) = 1 >> D(end, = 1 >> D(:, end) =
8 >> D(:, 1) = Второй вариант заполнения: >> D([1 end], = 1 >> D(:, [1 end]) = Добавим строку к матрице: >> [7 7 7] >> [A; B]
9 Удалим из матрица вторую и третью строки: >> A(2:3, = [] Удалим из матрицы 2 столбец: >> A(:, 2) = [] Удаление матрицы из памяти: >> clear A Арифметические операции над матрицами, такие как, сложение и вычитание осуществляются при помощи операций ‘+’ и ‘ ‘, умножение с помощью операции ‘*’. Особенностью арифметики MATLAB является наличие в этой системе двух комплектов символов для операций умножения, деления и возведения в степень. Один набор операций имеет традиционную символику (*, /, ^) и выполняется для массивов по правилам линейной алгебры. Второй набор имеет ту же символику, перед которой ставится точка (.*,./,.^), при этом операции выполняются поэлементно. >> [; 4 5 6; ] >> [2 1 3; 4 8 1; 3 4 2] 2 1 3
10 >> C = A+B C = >> C = A-B C = >> C = A*B C = >> C = A/B C = ВАЖНО! При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы должно равняться числу строк второй матрицы. В линейной алгебре возведение в степень может быть осуществлено только в случае квадратной матрицы. Операцию поэлементного возведения в степень можно применить к любой матрице. При необходимости поэлементного выполнения операций над матрицами и векторами перед знаками операций ^, *, /, следует ставить точку. Необходимость в поэлементных операциях диктуется тем, что при
11 программировании на языке MATLAB эти операции зачастую позволяют избежать чрезмерного использования операторов цикла. >> D.* Рассмотрим некоторые функции работы с векторами. Сумма элементов вектора: >> [ ] >> sum(a) 45 Произведение элементов вектора: >> prod(a) Максимальное значение вектора: >> max(a) 9 Минимальное значение вектора: >> min(a) 1 Максимальное значение вектора и его номер: >> [m, k] = max(a) m = 9 k =
12 9 Минимальное значение вектора и его номер: >> [m,k] = min(a) m = 1 k = 1 Среднее арифметическое вектора: >> mean(a) 5 Сортировка элементов вектора по возрастанию: >> sort(a) Сортировка элементов вектора по убыванию: >> -sort(-a) Разворот вектора на 90 градусов: >> rot90(a)
13 1 Сумма элементов в столбцах матрицы: >> [; 4 5 6; ] >> sum(a,1) Сумма элементов в строках матрицы: >> sum(a,2) Произведение элементов в столбцах матрицы: >> sum(sum(a)) 45 Произведение элементов в строках матрицы: >> prod(a) Максимальное значение в каждом столбце: >> prod(a’) Максимальное значение в каждом столбце: >> max(a)
14 Максимальное значение в каждой строке: >> max(a’) Минимальное значение в каждом столбце: >> min(a) Минимальное значение в каждой строке: >> min(a’) Среднее арифметическое в столбцах: >> mean(a) Среднее арифметическое в строках: >> mean(a’) Сортировка: >> [1 3 4; 2 5 1; 6 4 8] >> sort(a)
15 >> sort(a’) Разворот матрицы на 90 градусов: >> rot90(a) Зеркальное отображение матрицы относительно вертикальной оси: >> fliplr(a) Зеркальное отображение матрицы относительно горизонтальной оси оси: >> flipud(a) К основным функциям для работы с матрицами размерности MATLAB относят: n m в
16 P = zeros(n,m) заполнение прямоугольной матрицы P нулями; P = eye(n,m) единичная матрица Р; P = ones(n,m) заполнение прямоугольной матрицы P единицами. >> E = eye(2) E = >> O=zeros(2) O = >> U = ones(2) U = >> [E, 3*U; 2*U, O]
17 Для работы с матрицами часто используют оператор цикла for, который позволяет обрабатывать элементы матрицы через обращение к ним с помощью индексной математики. >> eye(5) >> for i=1:4 A(i, i+1) =2; A(i+1, i) =3; end >> A
18 P’ транспонирование матрицы P; plus(a, B) сложение матриц; times(a, B) поэлементное умножение матриц; mtimes(a, B) матричное умножение матриц; diag(p) диагональная матрица, где P вектор, количество элементов которого определит размерность и значения диагонали; diag(a) выделение диагонали, где А матрица, результат векторстолбец, состоящий из элементов, расположенных на главной диагонали; magic(n), magic(n, m) магический квадрат, матрица, у которой суммы элементов в строках, столбцах и диагоналях одинаковы; det(a) определитель квадратной матрицы; norm(a) модуль вектора А размерностью n, A n 2 a i ; i 1 dot(a, B) скалярное произведение векторов А и В, dot n ( A, B ) a i b i ; i 1 cross(a, B) векторное произведение векторов А и В; inv(p) нахождение обратной матрицы P; eig() вычисление собственных чисел и векторов; sparse(a) создание разреженной матрицы; jordan(a) диагонализация матрицы-аргумента, возвращает две матрицы: первая матрица для преобразований, вторая диагональная матрица. Если после формирования массива Х потребуется, не изменяя элементов массива, изменить его размеры, можно воспользоваться функцией reshape (Х, М, N), где M и N новые размеры массива Х. Объяснить работу этой функции можно, только исходя из способа, каким система MATLAB хранит элементы массивов в памяти компьютера. Она хранит их в непрерывной области памяти упорядоченно по столбцам: сначала располагаются элементы первого столбца, вслед за ними расположены
19 элементы второго столбца и т.д. Помимо собственно данных (элементов массива) в памяти компьютера хранится также управляющая информация: тип массива (например, double), размерность и размер массива, другая служебная информация. Этой информации достаточно для определения границ столбцов. Отсюда следует, что для переформирования матрицы функцией reshape достаточно изменить только служебную информацию и не трогать собственные данные. Поменять местами строки матрицы с ее столбцам можно операцией транспортирования, которая обозначается знаком.’ (точка и апостроф). Если вызвать эту функцию с двумя аргументами, например R=rand(2,3),то получится матрица R случайных элементов размером 2×3. При вызове функции rand с тремя и более скалярными аргументами производятся многомерные массивы случайных чисел.
Matlab обращение к элементу матрицы
Многомерные массивы в системе MATLAB
Многомерными называем массивы с размерностью больше двух. Для индексации элементов таких массивов требуется три или более номера, указывающие на положение выбираемого элемента вдоль нескольких направлений упорядочивания.
Дадим наглядную иллюстрацию многомерных массивов на примере массива трёх измерений. Допустим, что ежедневно в течение месяца проводятся измерения одних и тех же величин, причём значения этих величин за день сводятся в прямоугольную таблицу. Тогда в конце месяца имеются тридцать двумерных таблиц. Как упорядочить всю эту совокупность опытных данных? Для этого можно расположить эти матрицы вдоль некоторого направления и пронумеровать их. Это будет уже третье направление упорядочивания данных, так как вдоль первого направления (условно — вертикального) упорядочиваются строки, вдоль второго (горизонтального) — столбцы. В результате третий индекс для доступа к отдельному элементу данных будет равен номеру таблицы вдоль «направления времени«. Получившаяся совокупность упорядоченных данных иллюстрируется следующим рисунком:
Если создать трёхмерный массив A , содержащий так упорядоченные данные, то к индивидуальному данному можно обращаться с помощью трёх индексов. Элемент A(1,2,2) находится в первой строке, втором столбце и во второй матрице. Из рисунка видно, что этот элемент равен 3 .
Теперь расскажем о том, какими операциями можно создать такой массив. Во-первых, это прямое прописывание всех его элементов:
Процесс задания всех элементов такого трёхмерного массива допускает группировку. Сначала можно по-очереди сформировать первую матрицу (любым способом) B1 , затем — вторую матрицу B2 и так далее. После того, как все матрицы будут сформированы, можно для создания трёхмерного массива выполнить следующие тридцать групповых присваиваний (по одной матрице за одно присваивание):
A(. 1) = B1; A(. 2) = B2; …A(. 30) = B30;
Рассмотренный способ ранее рассматривался при создании одномерных и двумерных массивов. Кроме него для таких массивов применялась ещё операция конкатенации. Но эта операция непосредственно для создания массивов высокой размерности неприменима, так как разделители (запятая и точка с запятой) в этой операции работают лишь на разграничения столбцов и строк.
И, наконец, целесообразно применить функцию ones в тех случаях, когда почти все элементы многомерного массива равны единице, после чего прописать индивидуальные значения для немногочисленных неединичных элементов.
Для примера, создадим таким образом трёхмерный массив D с размером 2x3x2:
а потом изменим значения двух элементов:
После этого попросим MATLAB показать содержимое этого массива:
Мы ранее в связи с матрицами (массивами размерности два) уже рассказывали, как MATLAB хранит в памяти элементы массивов, а именно в виде одного большого столбца. Это же справедливо и для многомерных массивов. К примеру, для только что представленного на рисунке трёхмерного массива D сначала идут элементы первого столбца первой матрицы («страницы«), затем — второго столбца первой матрицы, далее — элементы первого столбца второй матрицы, и, наконец, идут последними элементы второго столбца второй матрицы. Обратиться к элементам в такой последовательности можно, указав единственный индекс для трёхмерного массива D . Верны следующие равенства:
Работа с массивами размерности 4 и выше вполне аналогична рассмотренной нами работе с массивами размерности 3.
Математические пакеты (MATLAB).
Работа с матрицами.
Матрица — прямоугольная таблица.
dim A (dimention — размерность) = n*m.
Это означает, что матрица имеет n строк и m столбцов.
-
Матрицы:
- 1*m — матрица-строка;
- n*1 — матрица-столбец;
- n*n — квадратная матрица.
Квадратная матрица — важнейший частный случай.
Если элементы главной диагонали равны 1, а остальные равны 0, то такая матрица называется «единичной» (обозначение: E или I).
Пример: определить матрицу для системы MATLAB.
Решение: в системе MATLAB для матриц применяются буквенные обозначения. Множество элементов записывается в квадратных скобках «[]»; элементы одной строки записываются через запятую или через пробел, строки разделяются точкой с запятой «;».
A = [3 2; 1 4];
или
A = [3 2; 1 4]
A = [3, 2; 1, 4];
или
A = [3, 2; 1, 4]
Рассмотрим различия между строками: очевидно, различие между парами строк состоит лишь в использовании запятой или пробела (см. выше). Другой вопрос — использовать ли точку с запятой в конце строки?
Если Вы хотите, чтобы система MatLab отобразила результат операции в рабочем поле, точку с запятой ставить не нужно.
Приведем результаты работы программ:

Без точки с запятой:

С точкой с запятой:
Любое число является матрцей размерностью 1*1.
Действия над матрицами:
- A+B — сложение (размерности матиц должны совпадать): A+B = [aij+bij] — складываются соответственнае элементы. Команда MATLAB: A+B;
- c*A — умножение на скаляр (с — скаляр, т.е. какое-то число). Команда MATLAB: 2*A;
- A*B — умножение матриц (количество столбцов первой матрицы должно быть равно количеству строк второй). Итоговая матрица имеет размерность: * . Команда MATLAB: A*B;
Внимание! A*B не равно(!) B*A.
Для матриц не определена операция деления (X = b/A). Зато есть операция нахождения обратной матрицы (Команда MATLAB: A -1 ). Тогда X = A -1 *b. Команда MATLAB: X = A^(-1).
Умножение матриц (MATLAB).
Узнать, как математически выполняется умножение матриц, можно в соответствующем разделе: Математика/Умножение матриц.
В MATLAB у множение записывается при помощи оператора * или .* (для поэлементного умножения).
Пример: выполнить умножение матриц в системе MATLAB:

-
Команды MATLAB:
- A = [0 1 -1; 0 2 1];
- B = [1 2; -1 0; 0 1];
- A*B;


Определитель квадратной матрицы.
Естественно, необходимо знать, как математически вычисляется определитель матриц. Почитайте в соответствующем разделе: Математика/Определитель (детерминант) матрицы.
В MATLAB нахождение определителя записывается при помощи команды det( ).
Пример: найти определитель матрицы A = [0 1; 2 0] с помощью MATLAB.
Обратная матрица.
Обязательно прочитайте, как математически вычисляется обратная матрица, в соответствующем разделе: Математика/Нахождение обратных матриц.
В MATLAB нахождение обратных матриц записывается при помощи команды ^(-1).
Пример: найти обратную матрицу для A = [2 3 1; 2 8 0; 5 6 3] с помощью MATLAB.
4.1. Использование матриц в matlab.
Базовой структурой данных в MATLAB является матрица (matrix): двухмернaя, имеющая прямоугольную форму структура данных, в которой хранится набор элементов данных в простом и легко доступном формате. Эти элементы данных могут быть числами, символами, логическими единицами true или false, или даже другими типами структур данных MATLAB. В MATLAB используются двухмерные матрицы для хранения отдельных чисел, а также, линейных последовательностей данных. В этих случаях размерности 1×1 и 1×n, соответственно, где n – длина числовой последовательности. MATLAB также поддерживает структуры данных, которые имеют больше чем два измерения. В MATLAB эти структуры данных имеют название arrays (массивы). MATLAB является вычислительной средой, основой которой является матрица. Все вводимы в MATLAB данные хранятся в форме матрицы или многомерного массива.
4.1.1. Создание матриц и базовые матричные операции.
Матрица – это двух мерный массив вещественных или комплексных чисел. В MATLAB имеется ряд функций, которые позволяют создавать различные типы матриц. Простейший способ создания матрицы в MATLAB – использовать оператор констора матрицы, []. Этот оператор создает строку в матрице при вводе элементов (показаны ниже как E) в скобках. Каждый элемент необходимо отделять запятой или пробелом:
row = [E1, E2, . Em] row = [E1 E2 . Em]
Например, для того, чтобы создать матрицу из пяти элементов, напечатайте
A = [12 62 93 -8 22];
Для того, чтобы начать новую строку, надо закончить текущую точкой с запятой:
A = [row1; row2; . ; rown]
В этом примере вводится матрица, состоящая из 3-х строк и 5-и столбцов ( 3×5) чисел. Все строки должны иметь одинаковое число элементов,
A = [12 62 93 -8 22; 16 2 87 43 91; -4 17 -72 95 6]
Этот оператор констора матрицы может создавать только двухмерные матрицы (включая 0×0, 1×1, 1×n,).
Специализированные матричные функции.
Создает матрицу или массив, состоящий из всех единиц
Создает матрицу или массив, состоящий из всех нулей
Создает матрицу с единицами на диагонали и остальными нулями
Распределяет элементы входной матрицы в соответствии с заданным положением в выходной матрице
Преобразует вектор в диагональную матрицу
Создает квадратную матрицу, в которой сумма элементов строк, или элементов столбцов, или элементов главных диагоналей одинакова
Создает матрицу или массив случайных чисел имеющих равномерное распределнием
Создает матрицу или массив случайных чисел или случайных массивов имеющих нормальное распределнием
Создает вектор (1-на-n матрицу) содержащий случайное размещение заданного числа целых
Например, для создания волшебной квадратной матрицы 5×5 воспользумся функцией magic,

Конкатенация (объединение) матриц.
Матричная конкатенация – это объединение одной или большего числа матриц, для получения новой матрицы. Скобки [] используются не только как конструктор матрицы, но также как оператор конкатенации. Результатом выражения C = [A B] является конкатенация матриц A и B по горизонтали. Результатом выражения C = [A; B] является конкатенация матриц A и B по вертикали. This example constructs a new matrix C by concatenating matrices A and B in a vertical direction:
A = ones(2, 5) * 6; % матрица 2×5 все элементы которой равны 6
B = rand(3, 5); % матрица 3×5 состоящая из случайных чисел
C = [A; B] % конкатенация матриц A и B по вертикали

Функции матричной конкатенации
Конкатенация матриц вдоль заданного направления
Конкатенация матриц по горизонтали
Конкатенация матриц по вертикали
Конкатенация матриц по горизонтали и по вертикали
Создания блочной диагональной матрицы из существующих матриц
Генерирование числовых последовательностей, оператор двоеточие (:).
Оператор двоеточие (first:last) генерирует матрицу 1×n (или вектор) последовательных чисел от первого числа до последнего. По умолчанию получаем последовательность чисел, увеличивающихся на единицу, каждое последующее на 1 больше предыдущего.
10 11 12 13 14 15
Последовательность чисел не обязательно должна состоять из целых положительных. Она может содержать отрицательные числа, а также дроби:
-2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000
Для генерирования числовых последовательностей с шагом, отличным от 1, оператор двоеточие может использоваться со указанием величины приращения элементов (first:step:last). Величина step указывает шаг приращения (уменьшения, если step является отрицательным числом) элементов последовательности чисел. Например,
10 15 20 25 30 35 40 45 50
Шаг может быть дробным или отрицательным числом,
3.0000 3.2000 3.4000 3.6000 3.8000
9 8 7 6 5 4 3 2 1
Индексация матриц.
Для доступа к отдельному элементу матрицы задайте номер строки и номер столбца используя следующу запись A(n, m), где A – матричная переменная. Номер столбца всегда указывается первым, а номер столбца – втрым, например,
для доступа к элементу в 4-й строке, 2-й колонке напечатайте
Для массивов, которые имет размерность большую двух, необходимо задавать дополнительные индексы, которые следуют за индексами строк и столбцов.
Линейная индексация матриц. Вы можете обращаться к элементу матрицы используя единственный индекс, A(k). MATLAB хранит матрицы и массивы не в той форме, в которой они появляются в командном окне, а как единый столбец элементов. Этот единый столбец составлен из столбцов матрицы, каждый столбц присоединяется к предыдущему. Так, матрица A
A = [2 6 9; 4 2 8; 3 5 1]
в действительности хранится в памяти как последовательность
2, 4, 3, 6, 2, 5, 9, 8, 1
Элемент с строке 3, столбец 2 матрицы A (значение = 5) может быть идентифицирован как элемент 6 в действительной хранимой последовательности. Для доступа к этому элементу, есть возможность использовать стандартный синтаксис A(3,2), или есть возможность применить A(6), относящуюся к линейной индексации.
Обращение к последовательности элементов. Для матрицы A размерности 4×4, сумму элементов 4-го столбца можно вычислить набрав
A(1,4) + A(2,4) + A(3,4) + A(4,4)
Можно уменьшить размер выражения используя оператор двоеточие. Индексные выражения, включающие двоеточия, обращаются к последовательности элементов матрицы. Выражение,
обращается к элементам в строках с 1-й по m-ю, n-го столбца матрицы A. Используя эту запись, можно вычислить сумму элементов 4-го столбца матрицы A более компактно:
Обращение к элементам, которые не следуют друг за другом. Для этого используйте оператор двоеточия с величиной шага. Выражение m : 3 : n означает обращение к каждому третьему элементу матрицы. При линейной индексации имеем:
MATLAB поддерживает тип индексации массивом, при которой один массив используется как индекс в другом массиве. Этот тип индексации может быть основан на задании в массиве индексов либо номеров, либо размещения элементов. В приведенном ниже примере массив B состоит из индексов 1, 3, 6, 7, и 10 массива A. В этом случае, числовые значения элементов массива B соответствуют положению элементов в массиве A:
5 10 15 20 25 30 35 40 45 50
Ключевое слово end (конец). MATLAB предоставляет ключевое слово end для доступа к последнему элементу массива. В предыдущем примере можно использовать запись
Описание всех элементов строки или столбца. Двоеточие само по себе относится ко всем элементам строки или столбца матрицы. Используя следующую запись может быть вычислена сумма элементов во 2-м столбце волшебной квадратной 4×4 матрицы A:
Используя двоеточие в линейной индексации можно обратиться ко всем элементам всей матрицы.
Получение информации о матрице.
Функции, возвращающие информации о форме матрицы.
Возвращает величину самой длинной размерности
Возвращает число размерностей
Возвращает число элементов
Возвращает длину каждой размерности
Изменение размерности и формы матриц.
Способы увеличения размерности матрицы.
• Конкатенация новых элементов
• Размещение элементов за границами матрицы
Конкатенация наиболее подходит, если необходимо добавить к матрице новые элемнты или блоки, совместимые по размерности с исходной матрицей.
Для добавления одного или большего числа элементов к матрице, которые не совместимы по размерности с исходной матрицей, часто можно разместить новые элементы за границами исходной матрицы. MATLAB автоматически дополнит матрицу нулями, для того, чтобы она была прямоугольной.
Пример. Дана матрица 3×5,
A = [ 10 20 30 40 50; .
60 70 80 90 100; .
110 120 130 140 150];
ее необходимо дополнить 4-й строкой. Разместим новый элемент в 1-м столбце не существующей 4-й строки исходной матрицы. MATLAB расширит матрицу A добавлением новой 4-й строки, заполнив нулями колонки со 2-й по 5-ю.
60 70 80 90 100
110 120 130 140 150
Размерность матрицы может быть уменьшена за счет удаления строк и столбцов из матрицы присваиванием удаляемым строкам и столбцам значения пустого массива.
Пример. Дана матрица 4×4,
из нее необходимо удалить 2-й столбец,
Для удаления единственного элемента или последовательности элементов может быть использована линейная индексация. При этом результатом будет преобразование оставшихся элементов в вектор-строку,
в результате получим:
16 9 3 6 13 12 1
Функции, изменяющие форму матрицы
Изменяет форму матрицы
Вращает матрицу на 90 градусов
Поворачивает матрицу относительно вертикальной оси
Поворачивает матрицу относительно горизонтальной
Поворачивает матрицу относительно заданного направления
Поворачивает матрицу относительно ее главной диагонали, заменяя вектора-строки на вектора-столбцы, и наоборот
Транспонирует матрицу и заменяет каждый элемент комплексно-сопряженным
Примеры применения функций, изменяющих форму матрицы.
Используя матрицу А, имеющую размерность 3×4 построить матрицу В размерности 2×6:
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
B = reshape(A, 2, 6)
Для транспонирования матрицы можно использовать как функцию transpose, так и оператор (.’)s:
Скаляры. Скалярная величина – это любое отдельное вещественное или комплексное число, которое представлено в MATLAB как матрица размерности 1×1:
Функция isscalar определяет, содержит ли переменная скалярную величину:
Векторы. Вектор – это матрица, одина из размерностей которой равна единице, а другие больше единицы. Пример числового вектора-строки:
Похожие публикации:
- Какое расширение у файлов данных mathcad
- Кому принадлежит icq сейчас
- Почему mathcad не строит график
- Почему не скачивается telegram
Обращение к элементам массива
Обратиться к элементу массива можно, указав его имя и порядковый номер элемента в круглых скобках (нумерация элементов начинается с единицы): name (индекс). Пример —>M(1) ans = 4. —>M(3) ans = 6.
Матрицы
Ввод элементов матрицы также осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой, а строки разделяются между собой точкой с запятой: name = [X11, X12, . X1N; X21, X22, . X2N; . XM1, XM2, . XMN;]. Y=[1 2 3; 4 5 6;7 8 9 ] Y = 1. 2. 3. 4. 5. 6. 7. 8. 9. Нулевая Матрица — это матрица, все элементы которой равны нулю. Задается командой zeros как показано в примере —>K=zeros(3,3) K = 0. 0. 0. 0. 0. 0. 0. 0. 0. Матрица единиц — это матрица, каждый элемент которой равен единице. —>L=ones(2,3) L = 1. 1. 1. 1. 1. 1. Единичная матрица — квадратная матрица, элементы главной диагонали которой равны единице, а остальные равны нулю. Задается командой eye как показано в примере —>E=eye(4,4) E = 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1.
Обращение к элементам матрицы
Обратиться к элементу матрицы можно, указав после имени матрицы, в круглых скобках через запятую, номер строки и номер столбца, на пересе-чении которых расположен элемент: name(индекс1, индекс2). —>Y=[1 2 3; 4 5 6;7 8 9 ] Y = 1. 2. 3. 4. 5. 6. 7. 8. 9. —>Y(1,2) ans = 2. Важную роль при работе с матрицами играет знак двоеточия: «:». Указывая его вместо индекса при обращении к массиву, можно получать доступ к группам его элементов: Y(:,2) ans = 2. 5. 8. —>Y(1,:) ans = 1. 2. 3. Для выделения элементов в диагонали —>D=diag(Y) D = 1. 5. 9.
Операции над матрицами
Для работы с матрицами и векторами в MATLAB предусмотрены следующие операции: + – сложение; – – вычитание2; ‘ – транспонирование; ·* – матричное умножение; * – умножение на число; ^ – возведение в степень; .* – поэлементное умножение матриц; .^ – поэлементное возведение в степень; .\ – поэлементное левое деление;
Специальные функции matlab:
- rand(n,ь) — создаёт многомерную матрицу случайных чисел размерности nхm. Необязательный параметр p— символьная переменная, с помощью которой можно задать тип распределения случайной величины («uniform» — равномерное, «normal» — гауссовское);
- результат функции rand() — случайный скаляр. (Также можно использовать функцию grand, позволяющую получить случайные числа, имеющие бета-распределение; биномиальное, пуассоновское распределение; распредение «хи-квадрат» и др.)
- sort(X) — выполняет упорядочивание массива X по убыванию; если X — матрица, то сортировка выполняется по столбцам.
- size(V) — определяет размер массива V; если V — двумерный массив, то size(V, 1) или size(V, «г») определяют число строк матрицы V, a size(V, 2) или size(V, «с») определяют число столбцов.
- max(V) — функция возвращает наибольший элемент в массиве V;
- min(V) — возвращает наименьший элемент в массиве V.
