Как найти среднее всех элементов матрица

Average or mean value of array

Syntax

Description

example

M = mean(A) returns the mean of the
elements of A along the first array dimension whose size is
greater than 1.

  • If A is a vector, then mean(A) returns
    the mean of the elements.

  • If A is a matrix, then mean(A) returns
    a row vector containing the mean of each column.

  • If A is a multidimensional array, then
    mean(A) operates along the first array dimension
    whose size is greater than 1, treating the elements as vectors. The size of
    M in this dimension becomes 1,
    while the sizes of all other dimensions remain the same as in
    A.

  • If A is a table
    or timetable, then mean(A) returns a one-row table
    containing the mean of each variable. (since R2023a)

example

M = mean(A,"all")
returns the mean over all elements of A.

example

M = mean(A,dim) returns the
mean along dimension dim. For example, if A is
a matrix, then mean(A,2) returns a column vector containing the
mean of each row.

example

M = mean(A,vecdim)
returns the mean based on the dimensions specified in the vector
vecdim. For example, if A is a matrix,
then mean(A,[1 2]) returns the mean of all elements in
A because every element of a matrix is contained in the array
slice defined by dimensions 1 and 2.

example

M = mean(___,outtype) returns the mean
with a specified data type for any of the previous syntaxes.
outtype can be "default",
"double", or "native".

example

M = mean(___,missingflag) specifies
whether to include or omit missing values in A. For example,
mean(A,"omitmissing") ignores all missing values when
computing the mean. By default, mean includes missing
values.

Examples

collapse all

Mean of Matrix Columns

Create a matrix and compute the mean of each column.

A = [0 1 1; 2 3 2; 1 3 2; 4 2 2]
A = 4×3

     0     1     1
     2     3     2
     1     3     2
     4     2     2

M = 1×3

    1.7500    2.2500    1.7500

Mean of Matrix Rows

Create a matrix and compute the mean of each row.

A = [0 1 1; 2 3 2; 3 0 1; 1 2 3]
A = 4×3

     0     1     1
     2     3     2
     3     0     1
     1     2     3

M = 4×1

    0.6667
    2.3333
    1.3333
    2.0000

Mean of 3-D Array

Create a 4-by-2-by-3 array of integers between 1 and 10 and compute the mean values along the second dimension.

rng('default')
A = randi(10,[4,2,3]);
M = mean(A,2)
M = 
M(:,:,1) =

    8.0000
    5.5000
    2.5000
    8.0000


M(:,:,2) =

   10.0000
    7.5000
    5.5000
    6.0000


M(:,:,3) =

    6.0000
    5.5000
    8.5000
   10.0000

Mean of Array Page

Create a 3-D array and compute the mean over each page of data (rows and columns).

A(:,:,1) = [2 4; -2 1];
A(:,:,2) = [9 13; -5 7];
A(:,:,3) = [4 4; 8 -3];
M1 = mean(A,[1 2])
M1 = 
M1(:,:,1) =

    1.2500


M1(:,:,2) =

     6


M1(:,:,3) =

    3.2500

To compute the mean over all dimensions of an array, you can either specify each dimension in the vector dimension argument, or use the "all" option.

Mean of Single-Precision Array

Create a single-precision vector of ones and compute its single-precision mean.

A = single(ones(10,1));
M = mean(A,"native")

The result is also in single precision.

Mean Excluding Missing Values

Create a matrix containing NaN values.

A = [1.77 -0.005 NaN -2.95; NaN 0.34 NaN 0.19]
A = 2×4

    1.7700   -0.0050       NaN   -2.9500
       NaN    0.3400       NaN    0.1900

Compute the mean values of the matrix, excluding missing values. For matrix columns that contain any NaN value, mean computes with the non-NaN elements. For matrix columns that contain all NaN values, the mean is NaN.

M = 1×4

    1.7700    0.1675       NaN   -1.3800

Input Arguments

collapse all

AInput array
vector | matrix | multidimensional array | table | timetable

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

  • If A is a scalar, then
    mean(A) returns
    A.

  • If A is an empty 0-by-0 matrix, then
    mean(A) returns
    NaN.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | datetime | duration | table | timetable

dimDimension to operate along
positive integer scalar

Dimension
to operate along, specified as a positive integer scalar. If you do not specify the dimension,
then the default is the first array dimension of size greater than 1.

Dimension dim indicates the dimension whose
length reduces to 1. The size(M,dim) is 1,
while the sizes of all other dimensions remain the same.

Consider an m-by-n input matrix,
A:

  • mean(A,1) computes the mean of the elements
    in each column of A and returns a
    1-by-n row
    vector.

    mean(A,1) column-wise operation

  • mean(A,2) computes the mean of the elements
    in each row of A and returns an
    m-by-1 column
    vector.

    mean(A,2) row-wise operation

mean returns A when dim is
greater than ndims(A) or when size(A,dim) is 1.

vecdimVector of dimensions
vector of positive integers

Vector of dimensions, specified as a vector of positive integers. Each
element represents a dimension of the input array. The lengths of the output
in the specified operating dimensions are 1, while the others remain the
same.

Consider a 2-by-3-by-3 input array, A. Then
mean(A,[1 2]) returns a 1-by-1-by-3 array whose
elements are the means over each page of A.

Mapping of a 2-by-3-by-3 input array to a 1-by-1-by-3 output array

outtypeOutput data type
"default" (default) | "double" | "native"

Output data type, specified as one of the values in this table. These options also specify the
data type in which the operation is performed.

outtype Output data type
"default" double, unless the input data type is single,
duration,
datetime, table, or
timetable, in which case, the output
is "native"
"double" double, unless the data input type is duration,
datetime, table,
or timetable, in which case,
"double" is not supported
"native"

Same data type as the input, unless:

  • Input data type is logical,
    in which case, the output is
    double

  • Input data type is char, in
    which case, "native" is not
    supported

  • Input data type is
    timetable, in which case, the
    output is table

missingflagMissing value condition
"includemissing" (default) | "includenan" | "includenat" | "omitmissing" | "omitnan" | "omitnat"

Missing value condition, specified as one of the values in this
table.

Value Input Data Type Description
"includemissing" All supported data types

Include missing values in
A when computing the mean. If any
element in the operating dimension is missing, then the
corresponding element in M is
missing.

"includenan" double, single,
duration
"includenat" datetime
"omitmissing" All supported data types Ignore missing values in
A, and compute the mean over fewer
points. If all elements in the operating dimension are
missing, then the corresponding element in
M is missing.
"omitnan" double, single,
duration
"omitnat" datetime

More About

collapse all

Mean

For a finite-length vector A made up of
N scalar observations, the mean is defined as

Extended Capabilities

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

This function fully supports tall arrays. For
more information, see Tall Arrays.

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

Usage notes and limitations:

  • If you specify dim, then it must
    be a constant.

  • The outtype and missingflag
    options must be constant character vectors or strings.

  • Integer types do not support the "native" output
    data type option.

  • See Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).

GPU Code Generation
Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.

Usage notes and limitations:

  • If you specify dim, then it must be a constant.

  • The outtype and missingflag options
    must be constant character vectors or strings.

  • Integer types do not support the "native" output data
    type option.

Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.

This function fully supports thread-based environments. For
more information, see Run MATLAB Functions in Thread-Based Environment.

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

The mean function
partially supports GPU arrays. Some syntaxes of the function run on a GPU when you specify the
input data as a gpuArray (Parallel Computing Toolbox). Usage notes and limitations:

  • The "native" option is not supported.

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™.

Usage notes and limitations:

  • The "native" option is not supported.

For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

Version History

Introduced before R2006a

expand all

R2023a: Perform calculations directly on tables and timetables

The mean function can calculate on all variables within a table or
timetable without indexing to access those variables. All variables must have data types
that support the calculation. For more information, see Direct Calculations on Tables and Timetables.

R2023a: Specify missing value condition

Include or omit all missing values in the input array when computing the mean by
using the "includemissing" or "omitmissing"
options. Previously, "includenan", "omitnan",
"includenat", and "omitnat" specified a
missing value condition that was specific to the data type of the input
array.

R2023a: Improved performance with small group size

The mean function shows improved performance when computing
over a real vector when the operating dimension is not specified. The function
determines the default operating dimension more quickly in R2023a than in
R2022b.

For example, this code computes the mean along the default vector dimension. The
code is about 2.2x faster than in the previous release.

function timingMean
A = rand(10,1);
for i = 1:8e5
    mean(A);
end
end

The approximate execution times are:

R2022b: 0.91 s

R2023a: 0.41 s

The code was timed on a Windows® 10, Intel®
Xeon® CPU E5-1650 v4 @ 3.60 GHz test system using the
timeit function.

R2018b: Operate on multiple dimensions

Operate on multiple dimensions of the input array at a time. Specify a vector of
operating dimensions, or specify the "all" option to operate on
all array dimensions.

mean

Синтаксис

Описание

пример

M = mean(A) возвращает среднее значение элементов A вдоль первого измерения массива, размер которого не равняется 1.

  • Если A вектор, затем mean(A) возвращает среднее значение элементов.

  • Если A матрица, затем mean(A) возвращает вектор-строку, содержащий среднее значение каждого столбца.

  • Если A многомерный массив, затем mean(A) действует вдоль первого измерения массива, размер которого не равняется 1, обрабатывая элементы как векторы. Эта размерность становится 1 в то время как размеры всех других размерностей остаются то же самое.

пример

M = mean(A,'all') вычисляет среднее значение по всем элементам A. Этот синтаксис допустим для MATLAB® версии R2018b и позже.

пример

M = mean(A,dim) возвращает среднее значение по измерению dim. Например, если A матрица, затем mean(A,2) вектор-столбец, содержащий среднее значение каждой строки.

пример

M = mean(A,vecdim) вычисляет среднее значение на основе размерностей, заданных в векторном vecdim. Например, если A матрица, затем mean(A,[1 2]) среднее значение всех элементов в A, поскольку каждый элемент матрицы содержится в срезе массивов, заданном размерностями 1 и 2.

пример

M = mean(___,outtype) возвращает среднее значение с заданным типом данных, с помощью любого из входных параметров в предыдущих синтаксисах. outtype может быть 'default''double', или 'native'.

пример

M = mean(___,nanflag) задает, включать ли или не использовать NaN значения от вычисления для любого из предыдущих синтаксисов. mean(A,'includenan') включает весь NaN значения в вычислении, в то время как mean(A,'omitnan') игнорирует их.

Примеры

свернуть все

Среднее значение столбцов матрицы

Создайте матрицу и вычислите среднее значение каждого столбца.

A = [0 1 1; 2 3 2; 1 3 2; 4 2 2]
A = 4×3

     0     1     1
     2     3     2
     1     3     2
     4     2     2

M = 1×3

    1.7500    2.2500    1.7500

Среднее значение матричных строк

Создайте матрицу и вычислите среднее значение каждой строки.

A = [0 1 1; 2 3 2; 3 0 1; 1 2 3]
A = 4×3

     0     1     1
     2     3     2
     3     0     1
     1     2     3

M = 4×1

    0.6667
    2.3333
    1.3333
    2.0000

Среднее значение трехмерного массива

Создайте 4 2 3 массивами целых чисел между 1 и 10 и вычислите средние значения вдоль второго измерения.

rng('default')
A = randi(10,[4,2,3]);
M = mean(A,2)
M = 
M(:,:,1) =

    8.0000
    5.5000
    2.5000
    8.0000


M(:,:,2) =

   10.0000
    7.5000
    5.5000
    6.0000


M(:,:,3) =

    6.0000
    5.5000
    8.5000
   10.0000

Среднее значение страницы массивов

Создайте трехмерный массив и вычислите среднее значение по каждой странице данных (строки и столбцы).

A(:,:,1) = [2 4; -2 1];
A(:,:,2) = [9 13; -5 7];
A(:,:,3) = [4 4; 8 -3];
M1 = mean(A,[1 2])
M1 = 
M1(:,:,1) =

    1.2500


M1(:,:,2) =

     6


M1(:,:,3) =

    3.2500

Начиная в R2018b, вычислять среднее значение по всем размерностям массива, можно или задать каждую размерность в векторном аргументе размерности или использовать 'all' опция.

Среднее значение массива с одинарной точностью

Создайте вектор с одинарной точностью из единиц и вычислите его среднее значение с одинарной точностью.

A = single(ones(10,1));
M = mean(A,'native')

Результат находится также в одинарной точности.

Значение, исключая NaN

Создайте вектор и вычислите его среднее значение, исключая NaN значения.

A = [1 0 0 1 NaN 1 NaN 0];
M = mean(A,'omitnan')

Если вы не задаете 'omitnan', затем mean(A) возвращает NaN.

Входные параметры

свернуть все

AВходной массив
вектор | матрица | многомерный массив

Входной массив, заданный как векторный, матричный или многомерный массив.

  • Если A скаляр, затем mean(A) возвращает A.

  • Если A пустая матрица 0 на 0, затем mean(A) возвращает NaN.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | datetime | duration

dimРазмерность, которая задает направление расчета
положительный целочисленный скаляр

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

Размерность dim указывает на размерность, длина которой уменьшает до 1. size(M,dim) 1, в то время как размеры всех других размерностей остаются то же самое.

Рассмотрите двумерный входной массив, A.

  • Если dim = 1, затем mean(A,1) возвращает вектор-строку, содержащий среднее значение элементов в каждом столбце.

  • Если dim = 2, затем mean(A,2) возвращает вектор-столбец, содержащий среднее значение элементов в каждой строке.

mean возвращает A когда dim больше ndims(A) или когда size(A,dim) 1.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

vecdimВектор из размерностей
вектор из положительных целых чисел

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

Рассмотрите 2 3х3 входным массивом, A. Затем mean(A,[1 2]) возвращает 1 1 3 массивами, элементами которых являются средние значения по каждой странице A.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

outtypeТип выходных данных
'default' (значение по умолчанию) | 'double' | 'native'

Выходные данные вводят в виде 'default''double', или 'native'. Эти опции также задают тип данных, в котором выполняется операция.

outtype Тип выходных данных
'default' double, если типом входных данных не является singleдлительность, или datetime, в этом случае выходом является 'native'
'double' double, если типом данных не является duration или datetime, в этом случае, 'double' не поддерживается
'native' совпадающий тип данных как вход, если

  • Типом входных данных является logical, в этом случае выходом является double

  • Типом входных данных является char, в этом случае, 'native'не поддерживается

Типы данных: char

nanflag NaN условие
'includenan' (значение по умолчанию) | 'omitnan'

NaN условие в виде одного из этих значений:

  • 'includenan' — Включайте NaN значения при вычислении среднего значения, приведении к NaN.

  • 'omitnan' — Проигнорируйте весь NaN значения во входе.

Для datetime массивы, можно также использовать 'omitnat' или 'includenat' не использовать и включать NaT значения, соответственно.

Типы данных: char

Больше о

свернуть все

Среднее значение

Для вектора случайной переменной A составил из скалярных наблюдений N, среднее значение задано как

Расширенные возможности

«Высокие» массивы
Осуществление вычислений с массивами, которые содержат больше строк, чем помещается в памяти.

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

  • Если вы задаете dim, затем это должна быть константа.

  • outtype и nanflag опции должны быть постоянными векторами символов.

  • Целочисленные типы не поддерживают 'native' выходные данные вводят опцию.

  • «Смотрите информацию о генерации кода функций Toolbox (MATLAB Coder) в разделе «»Ограничения переменных размеров»».».

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

Указания и ограничения по применению:

  • Если вы задаете dim, затем это должна быть константа.

  • outtype и nanflag опции должны быть постоянными векторами символов.

  • Целочисленные типы не поддерживают 'native' выходные данные вводят опцию.

Основанная на потоке среда
Запустите код в фоновом режиме с помощью MATLAB® backgroundPool или ускорьте код с Parallel Computing Toolbox™ ThreadPool.

Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.

Массивы графического процессора
Ускорьте код путем работы графического процессора (GPU) с помощью Parallel Computing Toolbox™.

Указания и ограничения по применению:

  • 'native' опция не поддерживается.

Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).

Распределенные массивы
Большие массивы раздела через объединенную память о вашем кластере с помощью Parallel Computing Toolbox™.

Указания и ограничения по применению:

  • 'native' опция не поддерживается.

Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).

Представлено до R2006a

  • В этой теме 0 ответов, 1 участник, последнее обновление 3 года, 3 месяца назад сделано Васильев Владимир Сергеевич.
  • Сообщения

    • Написать программу, которая для целочисленной матрицы 10х10 определяет среднее арифметическое ее элементов и количество положительных элементов в каждой строке.

      Материалы по теме: Массивы в С++

      Программа должна:

      1. осуществлять ввод с клавиатуры значений элементов целочисленной матрицы;
      2. определять среднее арифметическое элементов целочисленной матрицы;
      3. определять количество положительных элементов в каждой строке целочисленной матрицы;
      4. выводить результаты вычислений.

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

      $$S = frac{sumlimits_{i=0}^{nrow} sumlimits_{j=0}^{ncol} A_{i,j}}{nrowcdot ncol} $$

      где a[i][j] —элемент i-й строки (i= 1, 2,..., nrow), j-го столбца (j=1, 2,..., ncol).

      Блок-схема алгоритма:

      Исходный код программы:

      #include <iostream>
      #include <iomanip> // для использования манипулятора
      
      using namespace std;
      
      void main()
      {
      
          // инициализация переменных
      
          const int nrow = 10, ncol = 20;
          int a[nrow][ncol];
          int i, j;
      
          setlocale(LC_ALL, "rus"); // возможность вывода информации на экран на русском языке
      
          // ввод элементов массива с клавиатуры
      
          cout << "Введите элементы массива:" << endl;
          for (i = 0; i < nrow; i++)
              for (j = 0; j < ncol; j++)
                  cin >> a[i][j];
      
          // вывод элементов массива на экран
          // ширина поля для вывода устанавливается в четыре символа
          //с помощью манипулятора setw()
      
          for (i = 0; i < nrow; i++) {
              for (j = 0; j < ncol; j++)
                  cout << setw(4) << a[i][j] << " ";
              cout << endl;
          }
      
          // инициализация переменных
          int n_posl_el;
          float s = 0;
      
          // обработка элементов матрицы для определения ее характеристик
      
          for (i = 0; i < nrow; i++) {
              n_posl_el = 0;
              for (j = 0; j < ncol; j++) {
                  s += a[i][j]; // сумма всех элементов матрицы
                  if (a[i][j] > 0)
                      n_posl_el++; // подсчет положительных элементов строки
              }
              cout << "Строка:" << i << "количество: " << n_posl_el << endl;
          }
          s /= nrow * ncol; // расчет среднего арифметического
          cout << "Среднее арифметическое" << s << endl;
      
          system("pause"); // осуществляет задержку экрана
      }
  • Автор

    Сообщения

  • Для ответа в этой теме необходимо авторизоваться.

Antisovenok, во-первых, ваша программа с ошибкой. В строках 32-34 вы сбиваете переменную цикла j из цикла в строке 29.

Фрагмент (строки 28-37) может выглядеть так:

C++
1
2
3
4
5
6
7
8
9
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            if ((i == j) && (a[i][j] < 0)) {
                for (int k = 0; k < n; k++) {
                    s = s + a[i][k];
                }
            }
        }
    }

При этом отпадает необходимость в переменной num.

Но на самом деле, всё ещё проще:

C++
1
2
3
4
5
6
7
    for (i = 0; i < n; i++) {
        if ((a[i][i] < 0)) {
            for (int k = 0; k < n; k++) {
                s = s + a[i][k];
            }
        }
    }

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

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

C++
1
2
3
    for (j = 0; j < n; j++)
        delete[] a[j];
    delete[] a;

Цитата
Сообщение от Antisovenok
Посмотреть сообщение

нужно переделать его с использованием указателей

Я вам подобную манипуляцию с одной программой уже сделал (Указатель в С++ (Я чайник, так что не кусайтесь, пожалуйста)).

Давайте вы как-то поднапряжётесь и сделаете это сами?

В качестве «информации к размышлению» можете принять следующее:

1. В вашем случае, a, типа double** — это указатель на массив указателей на массив double. Т.е. по адресу, хранящемуся в a располагается массив адресов, по которым располагаются массивы строк матрицы. Т.е. a — это массив массивов. (Для иллюстрации посмотрите строки 11-13 вашего кода. А ещё лучше посмотрите под отладчиком как работает этот кусок и где и как будет изменяться содержимое памяти в строках 11-20.)

2. Если double** pa = a, то *p — это адрес начала первой (нулевой) строки матрицы. Соответственно, после p++, *p будет содержать начала второй строки матрицы. И т.д. Т.е. операторы -- и ++ будут перемещать указатель pa по строкам матрицы вверх или вниз.

3. Если double* pra = *pa, то pra — это адрес начала строки матрицы, а *pra — это первый (нулевой) элемент строки матрицы. Соответственно, операторы -- и ++ будут перемещать указатель pra по строке влево или вправо.

4. Ну и наконец классика адресной арифметики: выражение *(*(a + i) + j) эквивалентно выражению a[i][j]. Советую разобраться почему.

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

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

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

Найти среднее арифметическое элементов матрицы и заменить им элементы последнего столбца и строки.
Найти среднее арифметическое значений элементов матрицы и заме¬нить этим значением элементы.

Найти среднее геометрическое отрицательных элементов матрицы 9х9 лежащих на главной диагонали.
Найти среднее геометрическое отрицательных элементов матрицы 9х9 лежащих на главной диагонали. .

Функции 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.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Учись учиться, не учась! 11083 — | 8252 — или читать все.

Урок 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

Оценка статьи:

2 звезды3 звезды4 звезды5 звезд5 звезд

Загрузка…

Adblock
detector

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как составить запроса в загс
  • Как найти хорошего психотерапевта онлайн
  • Как составить план по произведению еще мама
  • Cyberpunk 2077 как найти джуди
  • Как найти человека в черкесске

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии