Сергиенко А.Б. Цифровая обработка сигналов (2002) (1095939), страница 98
Текст из файла (страница 98)
Особсц- цо ооа улобца щщ оирслслсццц длины ощюмерцых вскторов. Итак, с точки зрения МАТ1.АВ х — это массив 1х1. Сделаем эту псрсмснную «настоящим» массивом, присвоив значение, скавкем, элементу, расположенному в пятом столбце четвертой строки: » х14. 5) = б х= 5 0 0 0 0 О 0 0 0 0 О 0 О О О О 0 0 0 б ЗАМЕЧАНИЕ 11уис)щиця элементов массивов в МЛТ1.АВ цв цщвстся с «давиды, как зто принято ври за- ццсц матриц в математике, а цс с нуля, как, скажем, в языках программирования С/С++. При обращении к злсмсцту массива щысксы указывшотся через занятую в круглых скобках. Как видите, переменная х стала массивом размером 4х5.
» 51ге[х) ап5 4 5 При попытке обратиться к элементу с индексами, выходящими за текущий размер массива, разумеется, выдается сообщение об ошибке: » х12. 7) ??? 1ооех ехсеег)5 васг)х 015)ео5)оо5. Здесь мы использовали и качестве второго индекса символ двоеточия (;), что означает «все элементы массива вдоль данной размерности». Таким образом, мы Чтобы уменьшить размер массшаа, нужно удалить из него некоторое количество строк или столбцов. Для этого нужно просто присвоить соответствующему фрагменту массива «пустое» значение ([)): х12, :) = П х 5 0 0 520 Приложение А. Основы работы о МАТСАВ получили доступ не к одному элементу массива, а к целому фрагменту.
Возможность работы с фрагментамн массивов, имеющаяся в Х1АТЕАВ, отсутствует в большинстве языков программирования, поэтому ее стоит обсудить подробнее. Для использования в дальнейших примерах сформируем квадратную матрицу А размером 5х5 — «магический квадрат»: » А = надтс(5) А = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 Для начала выделим из этого массива прямоуголы(ый блок, простирающийся от второй до третьей строки и от второго до четвертого столбца: » А(2:3. 2:4) апз = 5 7 14 6 13 20 Таким образом можно выделить из массива произвольный прямоугольный олок.
Если выделяемый блок по одному из измерений совпадает с размером исходного массива, вместо задания диапазона ин)(ексов можно указать просто двоеточие (мы уже сталкивались с этим при удалении фрагмента массива): » А(3:4, :) апз- 4 6 13 20 22 10 12 19 21 3 Некоторые отступления от общего синтаксиса возможны и тогда, когда выде7иемый фрагмент «упирается» в границу массива справа или снизу.
В этом случае для обозначения последнего (макспмального) возможного значения индекса по какой-либо размерности можно использовать ключевое слово епд. Это значение можно-использовать и при вычислении индексов. Например, выделим из массива А блок размером 2хЗ, расположенный в правом нижнем углу: » А(ел((-1:еп((.
ело-2:еп0) алз- 19 21 3 25 2 9 Выделяемый фрагмент не обязательно должен быть сплошным. Выделим из массива А второй и четвертый элементы первой и последней строк; » А( П ело]. (2 4]) апз- 24 8 18 2 Наконец, для выделения из массива абсолютно произвольного набора элементов придется прибегнуть к обращению по линейному (то есть одномерному) индек- 521 другие типы данных су. Элементы двумерных массивов при этом нумеруются по столбцам.
Выделим из массива А элементы, )тежащие на кросс-диагонали; » А((5 9 13 17 21)) апв = П 12 13 14 15 Для автоматического формирования одномерных индексов из двумерных предназначена функция эцЬ2тпт). Применим ее для получения одномерных индексов элементов массива А, лежащих на его кросс-лиагонали: » х - 1-5; х нокера столбцов » у = 5:-1:1: Ф нокера строк » тпт) = вн(т2тп0(в1ге(А), у, х) тпе = 5 9 13 17 21 Полученные значения фрагментов массивов можно це только сохранять в виде новых переменных, с ними можно производить вычисления, так сказать, «на месте».
В качестве примера увеличим в два раза зиаченця элементов первого столбца массива А: » А(, 1) - А(.. 1)*2 А = 34 24 1 8 15 46 5 7 14 16 8 6 13 20 22 20 12 19 21 3 22 18 25 2 9 Мы рассмотрели лишь основные приемы работы с массивами в МАТЮКАВ. Имеется еще множество функций, реализующих преобразования массивов, матричные операции и т, д, Часть этих функций перечислена в приложении Б, а более полробная информация содержится в справочной системе и документации. Другие типы данных Помимо одномерных векторов и двумерных матриц МАТ1.АВ подлерживает ряд других типов ланньтх.
К ним относятся многомерные массивы, строки, структуры, массивы ячеек, а также обаектьт. Подробное рассмотрение реализации объектно-ориентированных концепций в МАТ1 АВ выходит за рамки этого краткого описания, хотя минимальные сведения о работе с объектами приведены в главе 7 при обсуждении функций пакета Г11(ег Рев(яп.
Остальные перечисленные типы данных рассматриваются ниже, Многомерные массивы Многомерные массивы являются естественным обобщением двумерных массивов. Для обращения к их элементам используется необходимое число индексов, однако заполнять многомерный массив числами и выражениями приходится по частям, так как синтаксис МАТЮКАВ позволяет' записывать поэлементное содер- Приложение А. Основы работы с МАТ(АВ жимос только для олно- и двумсрных массивов. В качестве примера создадим трехмерный массив размером 2х2х2: » х(::,1) = (1 2:3 4]: 1 первый «слой» » х(:.:,2) = (5 б;7 0]: Ж второй «слой» » х х(;, .1) = 1 2 3 4 х(:.
.2) = 5 б 7 5 Как видите, вывод значений многомерного массива МЛТ1.АВ тоже ос)пцсстнляст по «слоям». Многие функции МАТ1.АВ, ориснтиронанныс на работу с векторами, прн получении входного параметра в виде дв1гмериого массива обрабатывают сто столбцы независимо. При нспользонанпи в качестве параметра многомерного массива такая обработка буднг вестись вдоль первого пзмсрснги, размер массива вдоль которого нс равен единице. Например, для созданного в приведенном примере трехмерного массива были бы независимо обработаны двухзлсмсптныс векторы х(:,1,1), х(:.2,1), х(:,1.2) и х(:,2,2).
Кроме того, многие такие функции позволяют явно указать, вдоль какой размерности следует выбирать векторы пз многомерного массива. Соответствующий параметр в документации обычно обозначается идентификатором 01М. В качество примера можно привести функции быстрого преобразования Фурье ттс и 1тт1, имеющие следующий вариант синтаксиса: у = ттс(х, М, 01М) и х - 1тт1(у, М, 01М). Имеются и функции, снспиально прсдназначснныс для ооработкп многомерных данных.
Обычно идентификаторы таких функций отличаются от имен пх одномерных родственников добавленной в конце буквой «и». Примером опять-таки могут служить функции быстрого преобразования Фурье, у которых имеются многомсрныс варианты тт1п и 1ттсп. Строки Для задания строковых констант используются апострофы: >» з1 = '01д11а]': » з2 = '51дпа)': » з3 = 'Ргосезз1пд'; С точки зрения МАТБАВ строки представляют собой массивы символов.
Поэтому, например, операция соединения (конкатснацпи) строк выполняется нс с помощью оператора сложения, а с использованием синтаксиса горизонтального соединения матриц: »з4=гз1' 'з2' 'з3] з4 = 01011а) 51дпа) Ргосезз1пд Основные функции работы со строками пере шслсны н разлслс «Бгг(вп» приложения Б. 523 Другие типы данных Структуры Структуры (всгпсспге) позволякгт объединить в одной переменной разнородные данные (пол» вЂ” Ве1б) и осушсствлять доступ к иим по именам. В языке С соответствующий тип данных тоже называется структурой, а в языке Рампа! — записью (гссогб). В МАТ)-АВ для создания структуры ие требуется специалт иых объявлений достаточно присвоить значение какому-либо полю. Имена полей указываются после имели переменной через точку.
Напрпх|ср, для храпения информации, извлеченной из ттау-файла, можно использовать следующую структуру: » х.паве = 'с:тх1пбохв'тиебтатСаба хат': Ф ииЯ файла » х.65 = 22050: $ частота дискретизации » х Ь1С5 = 16: $ число бит на отсчет » х,слаппе15 = 2: д число каналов » х.вапр1ев - 42752; Ж число отсче'ов » х.баса = хангеаб(х.папе1. Ж двумерный пассив отсчетов МАТ1 АВ показывает значения перемениых-структур следующим образом: паве: 'с:Ъх1пбохвтвеб1а1Саба.хат' 55. 22050 ЬтС5. 16 сПаппе15: 2 вавр1ев: 42752 баса; (42752х2 бооЬ)е) Значения полей, имеюших короткие представления, выводятся полностью, а для больших массивов указываются только размеры и тип данных.
Можно создавать и массивы структур, для этого, как обычно, используются индексы. Превратим перемеииую и в двухзлемеитиый массив структур: » х12).паве = 'с 1хтпбохв'твеб1атспогб.хач' 1х2 5СгосС аггау хтСП (те1бв; папе тв Ь1 С5 слаппе15 ваар1ев баСа Для массивов структур МАТ( АВ показывает только размеры массива и список нолей. Массивы ячеек Массивы ячеек (се11 аггау), так же как и структуры, позволяют объедиинть в одной перемсшюй разиородиые даииые. Однако обрашеиие к этим даппым про- В24 Приложение А. Основы работы с МАТЬАВ изводится не по именам полей, а по числовым индексам.