Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava_2a70_2014.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

2.16.3. Применение операций отношения и логических операций к массивам.

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

>> A=[1 1 1; 2 2 2; 4 4 4]

A =

1 1 1

2 2 2

4 4 4

>> B=[0 0 0; 9 9 9; 2 3 4]

B =

0 0 0

9 9 9

2 3 4

>> A<=B

ans =

0 0 0

1 1 1

0 0 1

Анализ результата данной операции показывает, что каждый нуль означает «ложь» для данной позиции внутри матриц, а единица – «истину». Полученная матрица показывает (своими единичными элементами), на каких позициях элементы матрицы A не превосходят соответствующие элементы матрицы B.

Работу логических операций над массивами покажем на примере операции «Логическое НЕ»:

>> x=[0 1 2 3 4 5 0]

x =

0 1 2 3 4 5 0

>> ~x

ans =

1 0 0 0 0 0 1

В параграфе 2.13 рассматривалась также работа логической функции «Исключающее ИЛИ» в случае, если операндами являются вещественные скаляры. Функция xor работает также и с массивами одинаковых размеров, поэлементно реализуя операцию «Исключающее ИЛИ». Напомним, что каждый элемент трактуется как истинный, если он не равен нулю и как ложный в случае его равенства нулю. Продемонстрируем результат работы функции xor над некоторыми заданными матрицами A и B, рассмотренными в предпоследнем примере:

>> xor(A,B)

ans =

1 1 1

0 0 0

0 0 0

Следует отметить еще пару логических функций – all и any. Функция all в случае векторов возвращает единицу («истину»), если все элементы вектора не равны нулю («истинны») и возвращает нуль, если хотя бы один элемент вектора нулевой. Функция any действует противоположным образом. В случае же матриц обе эти функции работают с их столбцами, возвращая для каждого столбца результат по описанной схеме, например:

>> all(A)

ans =

1 1 1

>> all(B)

ans =

0 0 0

>> any(A)

ans =

1 1 1

>> any(B)

ans =

1 1 1

2.16.4. Некоторые функции для работы с массивами.

Вообще, существует множество различных функций, специально предназначенных для работы с массивами. Это, в частности, уже рассмотренные ранее функции ones, zeros, sum, cat, size, ndims, reshape и многие другие. Часть перечисленных функций сообщает служебную информацию о массивах, другая группа функций обеспечивает контролируемое (управляемое) изменение их структуры, третья группа предназначена для генерации массивов с заданными свойствами и т.д. К последней группе можно отнести, в частности, рассмотренные в параграфе 2.15 функции eye и rand.

Среди функций, реализующих простейшие вычисления над массивами, помимо уже описанной функции sum отметим также функцию prod, которая вычисляет произведение элементов столбцов матрицы, например

>> A=[2 2 2; 3 3 3; 5 5 5]

A =

2 2 2

3 3 3

5 5 5

>> prod(A)

ans =

30 30 30

Как отмечалось, по умолчанию суммирование и перемножение элементов массива с помощью функций sum и prod выполняется по столбцам. Для того, чтобы выполнить соответствующие операции по строкам, указанные функции следует вызвать с двумя входными аргументами. Первым из аргументов задается имя матрицы, а вторым – номер индекса, по которому требуется выполнить суммирование или перемножение: 1 – по столбцам (по умолчанию), 2 – по строкам. Рассмотрим пример:

>> A=[1 2; 3 4]

A =

1 2

3 4

>> sum(A,2)

ans =

3

7

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

>> x=[3 7 5 4.8 8.95 2 6];

>> min(x)

ans =

2

>> max(x)

ans =

8.9500

>> A=[1 2 3; 4 5 6; 7 8 9]

A =

1 2 3

4 5 6

7 8 9

>> max(A)

ans =

7 8 9

>> min(A)

ans =

1 2 3

Если требуется определить максимальные и минимальные элементы не в столбцах, а в строках заданной матрицы, форма вызова функций max и min должна быть следующей:

>> max(A,[],2)

ans =

3

6

9

>> min(A,[],2)

ans =

1

4

7

Заметим, что результат представлен в виде вектор-столбца.

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

>> b=[3 2 4 8 5 7 3 1 0]

b =

3 2 4 8 5 7 3 1 0

>> sort(b)

ans =

0 1 2 3 3 4 5 7 8

>> B=[3 7 9; 4 8 1; 2 9 5]

B =

3 7 9

4 8 1

2 9 5

>> sort(B,2)

ans =

3 7 9

1 4 8

2 5 9

Функцию sort можно вызвать и с двумя выходными аргументами. В результате в первый выходной аргумент будет записан упорядоченный массив, а во второй – массив индексов соответствия элементов заданного и упорядоченного массивов, например:

>> [B,ind]=sort(B,2)

B =

3 7 9

1 4 8

2 5 9

ind =

1 2 3

3 1 2

1 3 2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]