Матрицы могут динамически изменять свой размер в процессе выполнения программы с помощью функций matrix и resize_matrix. Это позволяет адаптировать размер уже созданной матрицы к тем данным, которые ей предстоит хранить (рис. 1.3.2-7).
--> // Динамическое изменение размеров матриц
-->
--> А = [1 2 3; 4 5 6] // Исходная матрица
А =
1. 2. 3.
4. 5. 6.
--> А(3, 1) = 7 // Изменение размера матрицы путем дополнения элемента
А =
1. 2. 3.
4. 5. 6.
7. 0. 0.
-->
--> А(:, 3) = [] // Удаление 3-го столбца
А =
1. 2.
4. 5.
7. 0.
-->
-->// Создание вектора заданного размера из матрицы А
--> В = matrix(А, 1, 6)
В =
1. 4. 7. 2. 5. 0.
-->
--> // Создание матрицы (3х4) по экспоненциальному закону распределения
--> M = grand(3, 4, 'exp', 5) // с математическим ожиданием 5
M =
3.1472369 0.7660456 0.472206 0.4688152
7.350552 4.6290769 4.0357003 3.3184658
0.4401028 13.20044 9.4667509 0.5462453
-->
--> M1 = resize_matrix(M, 2, 2)// Изменение размера матрицы М(3х4) на М1(2х2)
M1 =
3.1472369 0.7660456
7.350552 4.6290769
Рис. 1.3.2-7 Примеры динамического изменения размеров матриц
На рис. 1.3.2-7 создана матрица А(2,3). Далее в эту матрицу добавлен элемент с индексами (3,1). Добавление элемента вызывает в матрице А создание третьей строки, где первому элементу в ней будет присвоено значение 7, а значения остальных элементов данной строки будут установлены в 0. Таким образом, размер матрицы может увеличиваться динамически.
Далее приведен пример динамического уменьшения размера матрицы, где для удаления третьего столбца матрицы А, используется обозначение пустой матрицы [].
Полностью изменить размер матрицы можно с использованием функции matrix. Эта функция трансформирует исходную матрицу в матрицу другого размера, копируя элементы столбец за столбцом. В следующем примере матрица А размером 3х2=6 преобразуется в вектор-строку с 6 элементами.
В последнем примере (рис. 1.3.2-7) с использованием функцииgrand создана матрица М размером (3х4), элементы которой распределены по экспоненциальному закону распределения с математическим ожиданием 5. Размер матрицы изменен с использованием функции resize_matrix. Таким образом матрица М(3х4) стала матрицей М1(2х2).
Функция size позволяет проверить размер матрицы и возвращает два параметра n и m, значения которых равны, соответственно, числу строк и столбцов в данной матрице (рис. 1.3.2-8).
--> // Динамическое изменение размеров матриц
-->
--> А = [1 2 3; 4 5 6] // Исходная матрица
А =
1. 2. 3.
4. 5. 6.
--> А(3, 1) = 7 // Изменение размера матрицы путем дополнения элемента
А =
1. 2. 3.
4. 5. 6.
7. 0. 0.
-->
--> А(:, 3) = [] // Удаление 3-го столбца
А =
1. 2.
4. 5.
7. 0.
-->
-->// Создание вектора заданного размера из матрицы А
--> В = matrix(А, 1, 6)
В =
1. 4. 7. 2. 5. 0.
-->
--> // Создание матрицы (3х4) по экспоненциальному закону распределения
--> M = grand(3, 4, 'exp', 5) // с математическим ожиданием 5
M =
3.1472369 0.7660456 0.472206 0.4688152
7.350552 4.6290769 4.0357003 3.3184658
0.4401028 13.20044 9.4667509 0.5462453
-->
--> M1 = resize_matrix(M, 2, 2)// Изменение размера матрицы М(3х4) на М1(2х2)
M1 =
3.1472369 0.7660456
7.350552 4.6290769
Рис. 1.3.2-7 Примеры динамического изменения размеров матриц
--> // Динамическое изменение размеров матриц
-->
--> А = [1 2 3; 4 5 6] // Исходная матрица
А =
1. 2. 3.
4. 5. 6.
--> А(3, 1) = 7 // Изменение размера матрицы путем дополнения элемента
А =
1. 2. 3.
4. 5. 6.
7. 0. 0.
-->
--> А(:, 3) = [] // Удаление 3-го столбца
А =
1. 2.
4. 5.
7. 0.
-->
-->// Создание вектора заданного размера из матрицы А
--> В = matrix(А, 1, 6)
В =
1. 4. 7. 2. 5. 0.
-->
--> // Создание матрицы (3х4) по экспоненциальному закону распределения
--> M = grand(3, 4, 'exp', 5) // с математическим ожиданием 5
M =
3.1472369 0.7660456 0.472206 0.4688152
7.350552 4.6290769 4.0357003 3.3184658
0.4401028 13.20044 9.4667509 0.5462453
-->
--> M1 = resize_matrix(M, 2, 2)// Изменение размера матрицы М(3х4) на М1(2х2)
M1 =
3.1472369 0.7660456
7.350552 4.6290769
Рис. 1.3.2-7 Примеры динамического изменения размеров матриц
Кроме формата size(А), функция size может имеет и другой формат:
nm=size(А,1),
nm=size(А,2),
nm=size(А,"*").
Возвращаемое значение в этом случае определяется вторым параметром функции:
· при l возвращается число строк;
· при 2 возвращается число столбцов;
· при "*" возвращается общее число элементов в матрице, равное
числу строк, умноженному на число столбцов.
Создание массивов ячеек
Создать массив ячеек можно с помощью операции фигурные скобки – {} или функции cell.
При наличии данных для ввода в массив ячеек, можно создать массив, используя операцию конструирования массива ячеек {} (рис. 1.3.2-8).
-->// Создание массива ячеек
-->
-->// Пример1
-->myCell = {1,2,3; 'текст', rand(5,10), {11; 22; 33}}
myCell =
[1x1 constant] [ 1x1 constant] [1x1 constant]
[1x1 string ] [5x10 constant] [3x1 cell ]
-->
-->// Пример 2
--> C = {}
C =
{}
-->
-->// Пример 3
-->emptyC = cell(3, 4)
emptyC =
[0x0 constant] [0x0 constant] [0x0 constant] [0x0 constant]
[0x0 constant] [0x0 constant] [0x0 constant] [0x0 constant]
[0x0 constant] [0x0 constant] [0x0 constant][0x0 constant]
Рис. 1.3.2-8. Создание массива ячеек с использованием {} и функции cell
Как и все массивы Scilab, массивы ячеек – прямоугольные, с одинаковым количеством ячеек в каждой строке. Матрица myCell (Пример1) представляет собой массив ячеек размером 2×3.
Операцию конструирования ячеек можно использовать для создания пустого массива ячеек {} – Пример2.
Чтобы добавить значения в массив ячеек, вначале нужно создать пустой массив. Для этого в Примере3 используется функция cell(3х4). В результате чего массивemptyC представляет собой массив ячеек размером 3×4, где каждая ячейка содержит пустой массив [] – Пример3.
1.3.3. Индексирование и векторизация
Дата: 2019-11-01, просмотров: 338.