Elettracompany.com

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

Matlab сортировка массива

Сортировка структуры массивов в Matlab

У меня есть структура массивов StockInfo в Matlab. Поля структуры StockInfo выглядят следующим образом:

Мне нужно отсортировать StockInfo на основе поля Return , чтобы каждый массив в структуре был отсортирован соответственно. Есть идеи, как это сделать?

3 Ответа

Как я уже упоминал в комментарии выше, ваш вопрос неясен. Я думаю, что вы путаете структуры и структурные массивы. Этот пост может оказаться полезным.

Тем не менее, вот пример, чтобы показать, что я думаю, что вы хотели сделать.

Сначала я создаю структурный массив с некоторыми случайными данными:

Созданная переменная представляет собой массив структур:

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

Далее можно отсортировать этот массив структур по полю «return» (каждая структура имеет соответствующее значение scalar):

В результате массив теперь отсортирован по значениям «return» в порядке возрастания:

Вы можете сортировать структурные массивы на основе полей с помощью функции FileExchange nestedSortStruct (ссылка).

Решение со встроенными функциями только может быть:

любым неиспользуемым идентификатором, если ваш Matlab старше и не поддерживает неиспользуемые выходные аргументы.

Похожие вопросы:

есть ли функция в matlab, которая сортирует массив в порядке убывания и повторно возвращает индексы из них? a=[88 33 99 2 11 32] затем b=[3 1 2 6 5 4]

У меня есть очень большой набор данных, организованный в несколько структурных массивов в MATLAB. Структуры выглядят примерно так: Flight1= .testpoint = 1 .Mach = 0.8 .Speed = 300 .Cieling = 35000.

Я хочу создать структуру в Matlab, состоящую из двух массивов 1-D и одной переменной. Итак, я делаю это: IQinfo.I=inputI; IQinfo.Q=inputQ; IQinfo.fc=45e6; Однако размер моей структуры равен 1, и мне.

Увеличение массива, например, через x = [x, a] в цикле, обычно не одобряется в программировании Matlab, потому что это приводит к одной или нескольким операциям изменения размера, и поэтому.

Мне нужно отсортировать массив массивов, предоставленных мне. Массив выглядит примерно так. var provided_array = [ inner_array_one = [‘1′, ’10’, ’11’, ‘Alpha’, ‘2A’], inner_array_two = [‘Hotdogs’.

Итак, у меня есть struct , как показано ниже, я хотел бы создать массив этой структуры и выделить для него память (используя malloc ). typedef struct < float *Dxx; float *Dxy; float *Dyy; >Hessian;.

Я пытаюсь инициализировать пустой массив, который сам содержит 5 пустых массивов. Но matlab, похоже, просто создает простую пустую переменную массива вместо этого. Ниже приведены два синтаксиса.

Мне нужна помощь в создании структуры данных в Matlab. До сих пор мне нужно было следующее: string1 value1 string2 value2 string3 value3 и так далее. Я использовал структуру для этого: mystruct =.

Возможный Дубликат : Эффективность вставки сортировка против пузырьковой сортировки против селекционной сортировки? является ли сортировка выделения более быстрой, чем вставка для больших массивов.

Matlab сортировка массива

Sort array elements

Syntax

Description

B = sort( A ) sorts the elements of A in ascending order.

If A is a vector, then sort(A) sorts the vector elements.

If A is a matrix, then sort(A) treats the columns of A as vectors and sorts each column.

If A is a multidimensional array, then sort(A) operates along the first array dimension whose size does not equal 1, treating the elements as vectors.

B = sort( A , dim ) returns the sorted elements of A along dimension dim . For example, if A is a matrix, then sort(A,2) sorts the elements of each row.

B = sort( ___ , direction ) returns sorted elements of A in the order specified by direction using any of the previous syntaxes. ‘ascend’ indicates ascending order (the default) and ‘descend’ indicates descending order.

B = sort( ___ , Name,Value ) specifies additional parameters for sorting. For example, sort(A,’ComparisonMethod’,’abs’) sorts the elements of A by magnitude.

[ B , I ] = sort( ___ ) also returns a collection of index vectors for any of the previous syntaxes. I is the same size as A and describes the arrangement of the elements of A into B along the sorted dimension. For example, if A is a vector, then B = A(I) .

Examples

Sort Vector in Ascending Order

Create a row vector and sort its elements in ascending order.

Sort Matrix Rows in Ascending Order

Create a matrix and sort each of its rows in ascending order.

Sort Matrix Columns in Descending Order

Create a matrix and sort its columns in descending order.

Sort String Array

Starting in R2017a, you can create string arrays using double quotes, and sort them using the sort function. Sort strings in each column of a string array according to Unicode® dictionary order.

Sort the strings in each row.

Sort and Index datetime Array

Create an array of datetime values and sort them in ascending order, that is, from the earliest to the latest calendar date.

B lists the sorted dates and I contains the corresponding indices of A .

Access the sorted elements from the original array directly by using the index array I .

Sort 3-D Array

Create a 2-by-2-by-2 array and sort its elements in ascending order along the third dimension.

Use A(:) , the column representation of A , to sort all of the elements of A .

Complex Vector

Sort the elements of a complex vector by their real parts. For elements with equal real parts, sort breaks the tie based on their imaginary parts.

Input Arguments

A — Input array
vector | matrix | multidimensional array

Input array, specified as a vector, matrix, or multidimensional array.

If A is a scalar, then sort(A) returns A .

If A is complex, then by default, sort sorts the elements by magnitude. If more than one element has equal magnitude, then the elements are sorted by phase angle on the interval (−π, π].

If A is a cell array of character vectors or a string array, then sort(A) sorts the elements according to the code order for the UTF-16 character encoding scheme. The sort is case-sensitive. For more information on sorting character and string arrays, see Sort Order for Character and String Arrays.

If A is a string array, then sort reorders the elements of the array, but does not reorder characters within the strings.

If A is a categorical array, then the sorting order is based on the category order returned by categories(A) .

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | categorical | datetime | duration
Complex Number Support: Yes

dim — Dimension to operate along
positive integer scalar

Dimension to operate along, specified as a positive integer scalar. If no value is specified, then the default is the first array dimension whose size does not equal 1.

Consider a matrix A . sort(A,1) sorts the elements in the columns of A .

sort(A,2) sorts the elements in the rows of A .

sort returns A if dim is greater than ndims(A) . dim is not supported when A is a cell array, that is, sort only operates along the first array dimension whose size does not equal 1.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

direction — Sorting direction
‘ascend’ (default) | ‘descend’

Sorting direction, specified as ‘ascend’ or ‘descend’ . direction is not supported when A is a cell array, that is, sort only sorts in ascending order.

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside quotes. You can specify several name and value pair arguments in any order as Name1,Value1. NameN,ValueN .

Example: sort(A,’MissingPlacement’,’last’)

‘MissingPlacement’ — Placement of missing values
‘auto’ (default) | ‘first’ | ‘last’

Placement of missing values ( NaN , NaT , , and missing ) specified as the comma-separated pair consisting of ‘MissingPlacement’ and one of the following:

‘auto’ — Missing elements are placed last for ascending order and first for descending order.

‘first’ — Missing elements are placed first.

‘last’ — Missing elements are placed last.

‘ComparisonMethod’ — Element comparison method
‘auto’ (default) | ‘real’ | ‘abs’

Element comparison method, specified as the comma-separated pair consisting of ‘ComparisonMethod’ and one of the following:

‘auto’ — Sort A by real(A) when A is real, and sort by abs(A) when A is complex.

‘real’ — Sort A by real(A) when A is real or complex. If A has elements with equal real parts, then use imag(A) to break ties.

‘abs’ — Sort A by abs(A) when A is real or complex. If A has elements with equal magnitude, then use angle(A) in the interval (-π,π] to break ties.

Читать еще:  Php select case

Output Arguments

B — Sorted array
vector | matrix | multidimensional array

Sorted array, returned as a vector, matrix, or multidimensional array. B is the same size and type as A . The order of the elements in B preserves the order of any equal elements in A .

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | categorical | datetime | duration

I — Sort index
vector | matrix | multidimensional array

Sort index, returned as a vector, matrix, or multidimensional array. I is the same size as A . The index vectors are oriented along the same dimension that sort operates on. For example, if A is a 2-by-3 matrix, then [B,I] = sort(A,2) sorts the elements in each row of A . The output I is a collection of 1-by-3 row index vectors describing the rearrangement of each row of A .

More About

Sort Order for Character and String Arrays

MATLAB ® stores characters as Unicode ® using the UTF-16 character encoding scheme. Character and string arrays are sorted according to the UTF-16 code point order. For the characters that are also the ASCII characters, this order means that uppercase letters come before lowercase letters. Digits and some punctuation also come before letters.

The sortrows function provides additional flexibility for subsorting over multiple columns of matrix or table inputs.

The sort function and the relational operators use different orderings for complex numbers. For more information, see Relational Operations.

Extended Capabilities

Tall Arrays
Calculate with arrays that have more rows than fit in memory.

This function supports tall arrays with the limitations:

You must specify the dimension to sort, as in sort(X,dim) .

Sorting the tall dimension, as in sort(X,1) , is only supported for column vectors.

For more information, see Tall Arrays.

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

The first input argument must not be a cell array.

If A is complex with all zero imaginary parts, then MATLAB might convert A to real(A) before calling sort(A) . In this case, MATLAB sorts A by real(A) , but the generated code sorts A by abs(A) . To make the generated code match MATLAB, use sort(real(A)) or sort(A,’ComparisonMethod’,’real’) . See Code Generation for Complex Data with Zero-Valued Imaginary Parts (MATLAB Coder).

If you supply dim , then it must be constant.

GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

This function fully supports GPU arrays. For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

This function fully supports distributed arrays. For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

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 следующим образом:

[ m , N ] = min(v);

откуда видно, что в векторе 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 содержит номера столбцов ненулевых элементов. То есть справедливы равенства

u1 == [ 1; 3; 2; 3; 1; 2; 3 ];
u2 == [ 1; 1; 2; 2; 2; 3; 3; 3 ]

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

Все данные 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:

Читать еще:  Php locale ru

» 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 для первичной обработки данных удобно использовать массивы и функции их обработки:

— mах(А) — возвращает наибольший элемент массива, если А одномерный массив (вектор). Если А матрица, то функция mах(А) возвращает вектор-строку, содержащую максимальные элементы каждого столбца.

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

— mах(А,В) — возвращает массив того же размера, что А и В, каждый элемент которого есть максимальный из соответствующих элементов этих массивов.

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

b=[3 5 9;1 7 3;6 8 2]

-max(A,[ ],dim) — возвращает наибольшие элементы по столбцам или по строкам матрицы в зависимости от значения скаляра dim (dim=l по столбцам и dim=2 по строкам соответственно). Например, mах(А,[ ],1) возвращает максимальные элементы каждого столбца матрицы А.

-[C,I] =max(A) — кроме максимальных значений возвращает вектор индексов I этих элементов.

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

-min(A) — возвращает минимальный элемент, если А — вектор; или возвращает вектор-строку, содержащую минимальные элементы каждого столбца, если А — матрица.

-min(A,B) — возвращает массив того же размера, что А и В, каждый элемент которого есть минимальный из соответствующих элементов этих массивов.

-min(A,[ ],dim) — возвращает наименьший элемент по столбцам или по строкам матрицы в зависимости от значения скаляра dim (dim=l по столбцам и dim=2 по строкам соответственно).

-[C,I] = min(A) — кроме минимальных значений возвращает вектор индексов этих элементов.

-mean (А) — возвращает арифметическое среднее значение элементов массива, если А — вектор; или возвращает вектор-строку, содержащую средние значения элементов каждого столбца, если А — матрица.

-mean(A,dim) — возвращает среднее значение элементов по столбцам или по строкам матрицы в зависимости от значения скаляра dim (dim=l по столбцам и dim=2 по строкам соответственно).

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

8.3333 5.6667 3.33338

-median (A) — возвращает медиану, если А — вектор; или вектор-строку медиан для каждого столбца, если А — матрица.

— median(A,dim) — возвращает значения медиан для столбцов или строк матрицы в зависимости от значения скаляра dim.

>> a=[5 9 2; 8 4 7; 12 4 1]

-std(X) — возвращает стандартное отклонение элементов массива, если X — вектор. Если X — матрица, то std(X) возвращает вектор-строку, содержащую стандартное отклонение элементов каждого столбца (обратите внимание, что оно отличается от среднеквадратического отклонения).

-std(X.flag) — возвращает то же значение, что и std(X), если flag=0; если flag=l, функция std(X.l) возвращает среднеквадратическое отклонение (квадратный корень из несмещенной дисперсии).

-std(X.flag.dim) — возвращает стандартное или среднеквадратическое отклонения по рядам (dim=2) или по столбцам(dim=1) матрицы X в зависимости от значения переменной dim.

>> a=[5 9 2; 8 4 7; 12 4 1]

3.5119 2.8868 3.2146

— sort (А) — в случае одномерного массива А сортирует и возвращает элементы по возрастанию их значений; в случае двумерного массива происходит сортировка и возврат элементов каждого столбца. Допустимы вещественные, комплексные и строковые элементы. Если А принимает комплексные значения, то элементы сначала сортируются по абсолютному значению, а затем, если абсолютные значения равны, по аргументу. Если А включает NaN-элементы, sort помещает их в конец.

-[В, INDEX] = sort(A) — наряду с отсортированным массивом возвращает массив индексов INDEX. Он имеет размер size(A), с помощью этого массива можно восстановить структуру исходного массива.

-sort(A,dim) — для матриц сортирует элементы по столбцам (dim=l) или по рядам в зависимости от значения переменной dim.

-sortrows(A) — выполняет сортировку рядов массива А по возрастанию и возвращает отсортированный массив, который может быть или матрицей, или вектором-столбцом.

-sortrows(A,column) — возвращает матрицу, отсортированную по столбцам, точно указанным в векторе column. Например, sortrows(A,[2 3]) сортирует строки матрицы А сначала по второму столбцу, и затем, если его элементы равны, по третьему.

-[В, index] = sortrows (А) — также возвращает вектор индексов index. Если А — вектор-столбец, то B=A(index). Если А — матрица размера m*n, то B=A(index.:).

-cplxpair(A.[],dim) — сортирует матрицу А по строкам или по столбцам в зависимости от значения параметра dim.

Выполнение работы

Вне зависимости от варианта необходимо рассчитать и дать словесную оценку мерам центральной тенденции и мерам разброса.

1. Дан массив целых чисел X=(x1,x2. xn). Сформировать массив Y=(y1,y2. ym), поместив в него в порядке убывания все различные (неповторяющиеся) числа, входящие в массив X. Определить, насколько отличаются средние арифметические значения элементов массивов X и Y.

2. Массив Х=(x1,x2. xn) содержит большое количество нулевых элементов. Определить положение и размер наиболее длинной серии таких элементов и удалить ее из состава массива.

3. Заданы два массива X=(x1,x2. xn) и Y = (y1,y2. ym), в состав которых входят натуральные числа, причем в каждом из этих массивов нет повторяющихся элементов. Сформировать массив Z, включив в него все элементы, которые одновременно содержатся в массиве X и массиве Y.

4. Задан целочисленный массив X=(x1,x2. xn), в котором могут быть одинаковые числа. Найти максимальный и минимальный элементы среди неповторяющихся чисел и обменять их местами. Учесть частный случай, когда в массиве нет неповторяющихся чисел.

5. Из массива целых положительных чисел X=(x1,x2. xn) удалить все четные по значению элементы, кроме последнего, после чего оставшиеся числа расположить в порядке возрастания. Учесть частные случаи (в массиве нет четных элементов, имеется только один четный элемент, все элементы — четные). Буферный массив не использовать.

6. Задан целочисленный массив X = (x1,x2. xn). Если в этом массиве имеются пары одинаковых, но противоположных по знаку элементов, то обменять их местами при условии, что в массиве больше нет равных им элементов. Например, в массиве (1 8 14 12 -8 -7 6 8 -14 -7 12 4) нужно обменять местами элементы 14 и -14.

7. В массиве X=(x1,x2. xn) переставить местами первый и второй отрицательные элементы, третий и четвертый отрицательные элементы и т.д. Если количество отрицательных элементов в массиве меньше двух, преобразование массива не производить. Определить, как изменилось положение минимального и максимального элементов массива Х при его преобразовании.

8. Найти максимальное и минимальное из чисел, встречающихся в целочисленном массиве X=(x1,x2. xn) более одного раза, и обменять их местами. Просмотр массива X выполнять только один раз.

9. Определить наибольший общий делитель всех чисел, содержащихся в заданной последовательности целых положительных чисел.

10. Элементы массива X = (x1,x2. xn) — это последовательность цифр целого числа, записанного в системе счисления с основанием q, 1 j) нечетных элементов преобразовать в четные элементы по формулам: x[i]:=x[i]+1, x[j]:=x[j]-1. Пары элементов i,j выбирать в порядке их следования в массиве X. Определить, как при этом изменились максимальный и минимальный элементы массива X.

14. В заданном массиве целых чисел X=(x1,x2. xn) найти самый длинный подмассив, который является арифметической прогрессией.

15. По заданному целочисленному массиву X=(x1,x2. xn) сформировать массив Y=(y1. ym) такой, что y[i] — это количество элементов из X, не превосходящих x[i] на конечном отрезке X от элемента i+1 до элемента n.

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