Progress-servis55.ru

Новости из мира ПК
20 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Matlab индекс элемента массива

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) . Таким образом, используя линейное индексирование:

Возвращение элемента несколько раз

С индексом и линейной индексацией вы также можете вернуть элемент несколько раз, повторяя его индекс так

Читать еще:  Ошибка сертификата в браузере как исправить

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

Для получения дополнительной информации см. Здесь .

Array Indexing

In MATLAB®, there are three primary approaches to accessing array elements based on their location (index) in the array. These approaches are indexing by position, linear indexing, and logical indexing.

Indexing with Element Positions

The most common way is to explicitly specify the indices of the elements. For example, to access a single element of a matrix, specify the row number followed by the column number of the element.

e is the element in the 3,2 position (third row, second column) of A .

You can also reference multiple elements at a time by specifying their indices in a vector. For example, access the first and third elements of the second row of A .

To access elements in a range of rows or columns, use the colon . For example, access the elements in the first through third row and the second through fourth column of A .

An alternative way to compute r is to use the keyword end to specify the second column through the last column. This approach lets you specify the last column without knowing exactly how many columns are in A .

If you want to access all of the rows or columns, use the colon operator by itself. For example, return the entire third column of A .

In general, you can use indexing to access elements of any array in MATLAB regardless of its data type or dimensions. For example, directly access a column of a datetime array.

For higher-dimensional arrays, expand the syntax to match the array dimensions. Consider a random 3-by-3-by-3 numeric array. Access the element in the second row, third column, and first sheet of the array.

For more information on working with multidimensional arrays, see Multidimensional Arrays.

Indexing with a Single Index

Another method for accessing elements of an array is to use only a single index, regardless of the size or dimensions of the array. This method is known as linear indexing . While MATLAB displays arrays according to their defined sizes and shapes, they are actually stored in memory as a single column of elements. A good way to visualize this concept is with a matrix. While the following array is displayed as a 3-by-3 matrix, MATLAB stores it as a single column made up of the columns of A appended one after the other. The stored vector contains the sequence of elements 12 , 45 , 33 , 36 , 29 , 25 , 91 , 48 , 11 , and can be displayed using a single colon.

For example, the 3,2 element of A is 25 , and you can access it using the syntax A(3,2) . You can also access this element using the syntax A(6) , since 25 is sixth element of the stored vector sequence.

While linear indexing can be less intuitive visually, it can be powerful for performing certain computations that are not dependent on the size or shape of the array. For example, you can easily sum all of the elements of A without having to prov >sum function.

The sub2ind and ind2sub functions help to convert between original array indices and their linear version. For example, compute the linear index of the 3,2 element of A .

Convert from the linear index back to its row and column form.

Indexing with Logical Values

Using true and false logical indicators is another useful way to index into arrays, particularly when working with conditional statements. For example, say you want to know if the elements of a matrix A are less than the corresponding elements of another matrix B . The less-than operator returns a logical array whose elements are 1 when an element in A is smaller than the corresponding element in B .

Now that you know the locations of the elements meeting the condition, you can inspect the indiv >ind as the index array. MATLAB matches the locations of the value 1 in ind to the corresponding elements of A and B , and lists their values in a column vector.

MATLAB «is» functions also return logical arrays that indicate which elements of the input meet a certain condition. For example, check which elements of a string vector are missing using the ismissing function.

Suppose you want to find the values of the elements that are not missing. Use the

operator with the index vector ind to do this.

Урок 5 — Работа с массивами в Матлаб(Matlab)

Все данные MatLab представляет в виде массивов. Очень важно правильно понять, как использовать массивы. Без этого невозможна эффективная работа в MatLab, в частности построение графиков, решение задач линейной алгебры, обработки данных, статистики и многих других. В данном подразделе описаны вычисления с векторами.

Массив — упорядоченная, пронумерованная совокупность однородных данных. У массива должно быть имя. Массивы различаются по числу размерностей или измерений: одномерные, двумерные, многомерные. Доступ к элементам осуществляется при помощи индекса. В MatLab нумерация элементов массивов начинается с единицы. Это значит, что индексы должны быть больше или равны единице.

Важно понять, что вектор, вектор-строка или матрица являются математическими объектами, а одномерные, двумерные или многомерные массивы — способы хранения этих объектов в компьютере. Всюду дальше будут использоваться слова вектор и матрица, если больший интерес представляет сам объект, чем способ его хранения. Вектор может быть записан в столбик (вектор-столбец) и в строку (вектор-строка). Вектор-столбцы и вектор-строки часто будут называться просто векторами, различие будет сделано в тех случаях, если важен способ хранения вектора в MatLab. Векторы и матрицы обозначаются курсивом, а соответствующие им массивы прямым моноширинным шрифтом, например: «вектор а содержится в массиве а», «запишите матрицу R в массив r».

Ввод сложение и вычитание векторов

Работу с массивами начнем с простого примера — вычисления суммы векторов:
, .

Для хранения векторов используйте массивы а и b. Введите массив а в командной строке, используя квадратные скобки и разделяя элементы вектора точкой с запятой:

» a = [1.3; 5.4; 6.9]
a =
1.3000
5.4000
6.9000

Так как введенное выражение не завершено точкой с запятой, то пакет MatLab автоматически вывел значение переменной а. Введите теперь второй вектор, подавив вывод на экран

Для нахождения суммы векторов используется знак +. Вычислите сумму, запишите результат в массив с и выведите его элементы в командное окно:

Читать еще:  Исправление ошибок в пдф онлайн

» с = а + b
с =
8.4000
8.9000
15.1000

Узнайте размерность и размер массива а при помощи встроенных функций ndims и size:

Итак, вектор а хранится в двумерном массиве а размерностью три на один (вектор-столбец из трех строк и одного столбца). Аналогичные операции можно проделать и для массивов b и c. Поскольку числа в пакете MatLab представляются в виде двумерного массива один на один, то при сложении векторов используется тот же знак плюс, что и для сложения чисел.

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

» s1 = [3 4 9 2]
s1 =
3 4 9 2
» s2 = [5 3 3 2]
s1 =
5 3 3 2
» s3 = s1 + s2
s3 =
8 7 12 4

Замечание 1

Если размеры векторов, к которым применяется сложение или вычитание, не совпадают, то выдается сообщение об ошибке.

Естественно, для нахождения разности векторов следует применять знак минус, с умножением дело обстоит несколько сложнее.
Введите две вектор-строки:

» v1 = [2 -3 4 1];
» v2 = [7 5 -6 9];

Операция .* (не вставляйте пробел между точкой и звездочкой!) приводит к поэлементному умножению векторов одинаковой длины. В результате получается вектор с элементами, равными произведению соответствующих элементов исходных векторов:

» u = v1.*v2
u =
14 -15 -24 9

При помощи .^ осуществляется поэлементное возведение в степень:

» р = v1.^2
p =
4 9 16 1

Показателем степени может быть вектор той же длины, что и возводимый в степень. При этом каждый элемент первого вектора возводится в степень, равную соответствующему элементу второго вектора:

» p = vl.^v2
Р =
128.0000 -243.0000 0.0002 1.0000

Деление соответствующих элементов векторов одинаковой длины выполняется с использованием операции ./

» d = v1./v2
d =
0.2857 -0.6000 -0.6667 0.1111

Обратное поэлементное деление (деление элементов второго вектора на соответствующие элементы первого) осуществляется при помощи операции .

» dinv = vl.v2
dinv =
3.5000 -1.6667 -1.5000 9.0000

Итак, точка в MatLab используется не только для ввода десятичных дробей, но и для указания того, что деление или умножение массивов одинакового размера должно быть выполнено поэлементно.
К поэлементным относятся и операции с вектором и числом. Сложение вектора и числа не приводит к сообщению об ошибке. MatLab прибавляет число к каждому элементу вектора. То же самое справедливо и для вычитания:

» v = [4 6 8 10];
» s = v + 1.2
s =
5.2000 6.2000 9.2000 11.2000
» r = 1.2 — v
r =
-2.8000 -4.8000 -6.8000 -8.8000
» r1 = v — 1.2
r1 = 2.8000 4.8000 6.8000 8.8000

Умножать вектор на число можно как справа, так и слева:

» v = [4 6 8 10];
» p = v*2
р =.
8 12 16 20
» pi = 2*v
pi =
8 12 16 20

Делить при помощи знака / можно вектор на число:

» р = v/2
p =
2 3 4 5

Попытка деления числа на вектор приводит к сообщению об ошибке:

» р = 2/v
. Error using ==> /
Matrix dimensions must agree.

Если требуется разделить число на каждый элемент вектора и записать результат в новый вектор, то следует использовать операцию ./

» w = [4 2 6];
» d = 12./w
d =
3 6 2

Все вышеописанные операции применимы как к вектор-строкам, так и к вектор-столбцам.
Особенность MatLab представлять все данные в виде массивов является очень удобной. Пусть, например, требуется вычислить значение функции sin сразу для всех элементов вектора с (который хранится в массиве с) и записать результат в вектор d. Для получения вектора d достаточно использовать один оператор присваивания:

» d = sin(с)
d =
0.8546
0.5010
0.5712

Итак, встроенные в MatLab элементарные функции приспосабливаются к виду аргументов; если аргумент является массивом, то результат функции будет массивом того же размера, но с элементами, равными значению функции от соответствующих элементов исходного массива. Убедитесь в этом еще на одном примере. Если необходимо найти квадратный корень из элементов вектора dсо знаком минус, то достаточно записать:

» sqrt(-d)
ans =
0 + 0.9244i
0 + 0.7078i
0 + 0.7558i

Оператор присваивания не использовался, поэтому пакет MatLab записал ответ в стандартную переменную ans.

Для определения длины вектор-столбцов или вектор-строк служит встроенная функция length:

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

Для сцепления вектор-строк также применяются квадратные скобки, но сцепляемые вектор-строки отделяются пробелами или запятыми:

» v1 = [1 2];
» v2 = [3 4 5];
» v = [v1 v2]
v =
1 2 3 4 5

Работа с элементами векторов

Доступ к элементам вектор-столбца или вектор-строки осуществляется при помощи индекса, заключаемого в круглые скобки после имени массива, в котором хранится вектор. Если среди переменных рабочей среды есть массив v, определенный вектор-строкой

» v = [1.3 3.6 7.4 8.2 0.9];

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

Появление элемента массива в левой части оператора присваивания приводит к изменению в массиве

» v(2) = 555
v =
1.3000 555.0000 7.4000 8.2000 0.9000

Из элементов массива можно формировать новые массивы, например

» u = [v(3); v(2); v(1)]
u =
7.4000
555.0000
1.3000

Для помещения определенных элементов вектора в другой вектор в заданном порядке служит индексация при помощи вектора. Запись в массив w четвертого, второго и пятого элементов v производится следующим образом:

» ind = [4 2 5];
» w = v(ind)
w =
8.2000 555.0000 0.9000

MatLab предоставляет удобный способ обращения к блокам последовательно расположенных элементов вектор-столбца или вектор-строки. Для этого служит индексация при помощи знака двоеточия. Предположим, что в массиве w, соответствующем вектор-строке из семи элементов, требуется заменить нулями элементы со второго по шестой. Индексация при помощи двоеточия позволяет просто и наглядно решить поставленную задачу:

» w = [0.1 2.9 3.3 5.1 2.6 7.1 9.8];
» w(2:6) = 0;
» w
w =
0.1000 0 0 0 0 0 9.8000

Присваивание w(2:6) = 0 эквивалентно последовательности команд
w(2) = 0; w(3)=0; w(4)=0; w(5)=0; w(6)=0.
Индексация при помощи двоеточия оказывается удобной при выделении части из большого объема данных в новый массив:

» w — [0.1 2.9 3.3 5.1 2.6 7.1 9.8];
» wl = w(3:5)
wl =
3.3000 5.1000 2.6000

Составьте массив w2, содержащий элементы w кроме четвертого. В этом случае удобно использовать двоеточие и сцепление строк:

» w2 = [w(l:3) w(5:7)]
w2 =
0.1000 2.9000 3.3000 2.6000 7.1000 9.8000

Элементы массива могут входить в выражения. Нахождение, например среднего геометрического из элементов массива u, можно выполнить следующим образом:

Конечно, этот способ не очень удобен для длинных массивов. Для того чтобы найти среднее геометрическое, необходимо набрать в формуле все элементы массива. В MatLab существует достаточно много специальных функций, облегчающих подобные вычисления.

Применение функций обработки данных к векторам

Перемножение элементов вектора-столбца или вектора-строки осуществляется при помощи функции prod:

» z = [3; 2; 1; 4; 6; 5];
» р = prod(z)
p = 720

Функция sum предназначена для суммирования элементов вектора. С ее помощью нетрудно вычислить среднее арифметическое элементов вектора z:

Читать еще:  Ошибка сертификата на всех сайтах

» sum(z)/length(z)
ans =
3.5000

В MatLab имеется и специальная функция mean для вычисления среднего арифметического:

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

» m1 = max(z)
m1 =
6
» m2 = min(z)
m2 =
1

Часто необходимо знать не только значение минимального или максимального элемента в массиве, но и его индекс (порядковый номер). В этом случае встроенные функции min и max необходимо использовать с двумя выходными аргументами, например

» [m, k] = min(z)
m =
1
k =
3

В результате переменной m будет присвоено значение минимального элемента массива z, а номер минимального элемента занесен в переменную k.
Для получения информации о различных способах использования функций следует набрать в командной строке help и имя функции. MatLab выведет в командное окно всевозможные способы обращения к функции с дополнительными пояснениями.
В число основных функций для работы с векторами входит функция упорядочения вектора по возрастанию его элементов sort.

» r = [9.4 -2.3 -5.2 7.1 0.8 1.3];
» R = sort(r)
R =
-5.2000 -2.3000 0.8000 1.3000 7.1000 9.4000

Можно упорядочить вектор по убыванию, используя эту же функцию sort:

» R1 = -sort(-r)
R1 =
9.4000 7.1000 1.3000 0.8000 -2.3000 -5.2000

Упорядочение элементов в порядке возрастания их модулей производится с привлечением функции abs:

» R2 = sort(abs(r))
R2 =
0.8000 1.3000 2.3000 5.2000 7.1000 9.4000

Вызов sort с двумя выходными аргументами приводит к образованию массива индексов соответствия элементов упорядоченного и исходного массивов:

» [rs, ind] = sort(r)
rs =
-5.2000 -2.3000 0.8000 1.3000 7.1000 9.4000
ind =
3 2 5 6 4 1

Matlab индекс элемента массива

В системе MATLAB несколько функций специально предназначены для работы с массивами. Одну из таких функций — функцию ones , f6fs24 мы уже рассмотрели в предыдущем пункте. Эта функция предназначена для создания массивов произвольной размерности с единичными элементами.

Другими функциями этой группы являются функция zeros , производящая массив из нулей, и функция rand , генерирующая массив со случайными элементами, равномерно распределёнными на интервале от до 1.

Например, выражение с этой функцией

производит массив 3×3 случайных чисел чисел

равномерно распределённых на интервале от до 1.

Если вызвать эту функцию с двумя аргументами

То получится матрица B размером 2×3, элементами которой являются случайные числа. Эту функцию можно вызвать и с большим числом скалярных аргументов — в этом случае будут генерироваться многомерные массивы случайных чисел.

Вообще, возможность вызывать функции в системе MATLAB с одним именем, но с различными аргументами — типична для этой системы! Все варианты возможных вызовов любой функции перечисляются с помощью команды

Получив такую справку по функции rand , узнаём, что вызов функции rand(2,3) полностью эквивалентен вызову rand([2,3]) , то есть вместо двух скалярных аргументов можно задать одну вектор-стоку с двумя элементами. Так как функция size для матрицы C = [ 1 2 ; 4 5 ; 7 8 ] возвращает вектор-строку v

элементами которой служат размеры матрицы C , то вызовы

D = rand(3,2); D = rand([3,2])

эквивалентны. Вместо последнего выражения можно использовать последовательность следующих двух выражений:

[m,n] = size(C); D = rand(m,n);

где мы ввели две скалярные переменные m и n для размеров матрицы C , определяемые за один вызов функции size .

Ранее при рассмотрении многомерных массивов мы уже сказали, что операцию конкатенации с помощью квадратных скобок нельзя применить для порождения нового измерения в матрицах (кроме как для перехода от размерности 1 к размерности 2). Для этой цели применяют специальную функцию cat . Пусть имеются два двумерных массива (матрицы) A1 = [ 1 2 3 ; 4 5 6 ] и A2 = [ 7 8 9 ; 3 2 1 ] . Тогда их конкатенация вдоль разных направлений приводит к следующим результатам:

1). cat(1,A1,A2) порождает массив [ 1 2 3 ; 4 5 6 ; 7 8 9 ; 3 2 1 ] , то есть тот же результат, что и [ A1 ; A2 ] .

2). cat(2,A1,A2) порождает массив [ 1 2 3 7 8 9 ; 4 5 6 3 2 1 ]

то есть тот же результат, что и [ A1 , A2 ] .

3). A3 = cat(3,A1,A2) порождает из двумерных массивов A1 и A2 трёхмерный массив A3 , который показывается в командном окне следующим образом:

Наглядно такой массив можно изобразить на «трёхмерном» рисунке:

Для простых расчётов с элементами массивов предназначены функции sum , prod , max , min и sort . Функцию sum чаще всего применяют для одномерных массивов, где она суммирует все элементы. Для матриц (двумерных массивов) эта функция суммирует элементы в столбцах, так что если B = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] , то

sum(B) == [ 12 , 15, 18 ]

Для многомерных массивов эта функция позволяет выбрать направление суммирования элементов.

Функция prod во всём аналогична только что рассмотренной функции sum , но только вместо суммирования выполняет умножение, так что

prod(B) == [ 28 , 80, 162 ]

Функции max и min ищут, соответственно, максимальный и минимальный элементы в массивах, причём если для одномерных массивов это единственный экстремальный элемент, то для матриц функции порождают набор экстремальных элементов для каждого столбца. Таким образом,

На примере этих функций покажем ещё одну уникальную особенность функций в системе MATLAB — возможность требовать от тех функций, которые это могут, разное число возвращаемых значений.

Пусть имеется вектор-сторока v=[ 5 2 6 8 3]; Вызывая функцию min для этого массива, находим наименьший из его элементов:

равный двум. Но если нас также будет интересовать и номер (индекс) N наименьшего элемента, то мы можем осуществить вызов функции min следующим образом:

откуда видно, что в векторе v наименьший элемент стоит на втором месте.

Функция sort сортирует в возрастающем порядке элементы одномерных массивов, элементы столбцов в матрицах (каждый столбец отдельно) и так далее.

Под конец рассмотрим очень важные функции all , any и find . Функция all в случае её применения к вектору возвращает 1 («истина«), если все элементы вектора не равны нулю («истинны«), или 0 в противном случае (то есть в случае, если хотя бы один элемент нулевой). Функция any действует противоположным образом. Она возвращает нуль в случае, когла все элементы вектора нулевые, и она возвращает единицу, когда хотя бы один элемент ненулевой. В случае применения к матрицам обе эти функции трактуют столбцы матриц как векторы, по каждому из которых нужно дать результат так, как это описано выше.

Для примера, если F = [ 1 2 0 ; 0 3 0; 7 4 0 ] , то

Функция find в качестве аргумента принимает некоторое условие, а возвращает набор номеров (индексов) неравных нулю элементов массива. Для одномерного массива v вызов этой функции

возвращает вектор u индексов ненулевых элементов. В частности, для вектора v=[1 0 3] имеет место равенство

так как отличны от нуля элементы с номерами (индексами) 1 и 3 .

Для матриц функция find возвращает уже не один вектор индексов, а целый их набор. Каждый вектор из этого набора получается обработкой отдельного столбца матрицы. Например, для матрицы A = [ 1 0 3; 0 4 5; 6 7 8] следующий вызов функции

возвращает вектор-столбцы u и u2 , первый из которых содержит номера строк отличных от нуля элементов матрицы A , причём матрица просматривается по столбцам слева-направо (сначала — первый столбец, затем — второй и т.д.). Вектор столбец u2 содержит номера столбцов ненулевых элементов. То есть справедливы равенства

Ссылка на основную публикацию
Adblock
detector