Логическое индексирование матрицы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Логическое индексирование матрицы А логической матрицей L, обозначаемое как А(L), возвращает такие элементы массива А, которые соответствуют позиции в массиве индексирования L и имеют значения %T (True).
При этой операции каждый элемент со значением %T в массиве индексации Lрассматривается как позиционный индекс в массиве A, к которому осуществляется доступ.

Логические массивы позволяют во многих случаях обходиться без операторов цикла (п. 1.5.4), поэтому хороший уровень программирования в среде Scilab требует умения применять логическое индексирование.

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

Scilab содержит специальные системные значения для определения переполнения, потери значимости и неопределенности операторов, таких как Inf и NaN. Чтобы помочь выполнять логические тесты для этих специальных значений существуют логические операторы isinf и isnan, поскольку часто элементы массива, имеющие значения NaN, нужно исключить из вычислений.

С помощью операций & и | Scilab позволяет выполнить соответствующие логические операции «и» и «или», причем над элементами всего вектора.

    Рассмотрим несколько примеров на использования логической индексации векторов (рис. 1.3.5-1).

 

--> // Примеры логической индексации --> --> vD = [-0.2, 1.0, 1.5, 3.0, -1.0, 4.2, 3.14]; --> // Пример1 -->iV1 = vD>= 0 iV1 = FTTTFTT --> --> // Пример2 -->vP1 = vD(iV1 == %T) // или vP 1 = vD ( vD >= 0) vP1 = 1. 1.5 3. 4.2 3.14 --> --> // Пример3 --> vP2 = vD(iV1 ~= %T) // или vP 1 = vD ( vD <= 0)  vP2 = -0.2 -1. --> --> //Пример4 -->vP3 = vD((vD>= 0) & (vD< 3)) vP3 = 4.2 3.14 --> --> // Пример 5 --> x = [2 -1 0 3 %nan 2 %nan 11 4 %inf]  x =
  1. -1. 0. 3. Nan 2. Nan 11. 4. Inf
--> --> // Пример6 -->xvalid=x(~isnan(x)) xvalid =                                                       2. -1. 0. 3. 2. 11. 4. Inf

 

Рис. 1.3.5-1 Примеры логической индексации векторов

 

ВПримере1 формируется матрица логических индексов iV1, соответствующих условию vD>=0Примере2 возвращаются элементы матрицы i P 1, соответствующие позиции в матрице индексирования ivD и имеющие значения %T. Эти примеры можно проиллюстрировать на рис. 1.3.5-2.

             
-0.2   F   -0.2    
 1.0   T   1.0   1.0
 1.5   T   1.5   1.5
.0 è T è 3.0 è 3.0
-1.0 vD >= 0 F vD(ivD) -1.0 vP1 = vD(iV1) 4.2
 4.2   T   4.2   3.4
 3.4   T   3.4    VP1

        vD          iV1          vD

Рис. 1.3.5-2 Иллюстрация примеров из рис. 1.3.5-2

 

ВПримере3 возвращаются элементы матрицы vP2, соответствующие позиции в матрице индексирования v D, значения которых %F. ВПримере4 возвращаются элементы матрицы vP3, соответствующие условию, что элементы матрицы v Dположительны и больше 3. В Примере5 формируется матрица х, которая используется в Примере6, для формирования матрицы xvalid путем исключения из матрицы х элементов, имеющих значение NaN.

Рассмотрим пример создания матрицы А размерностью 3×3 и вычисление логической матрицы L, удовлетворяющей условию A>0.5. Далее используя полученную матрицу L для индексирования матрицы A, присвоим соответствующим элементам матрицы A, значение равное 0. Решение данного примера приведено на рис.1.3.5-2.

 

--> // Пример логического индексирования массива А

-->A = rand(3, 3)

A =

0.7560439 0.6653811 0.685731

0.0002211 0.6283918 0.8782165

0.3303271 0.8497452 0.068374

--> L = A > 0.5

 L =

T T T

F T T

F T F

-->A(L) = 0

A =

0.     0. 0.     

0.0002211 0. 0.     

0.3303271 0. 0.068374

// Более короткое решение A ( A > 0.5) = 0;

       

Рис. 1.3.5-2 Пример логического индексирования массива А

В Приложении1.3, табл. 1.3.5-1рассмотрены дополнительные примеры логического индексирования матриц, где L является матрицей логических значений.

 

 


Использование функции find

    В дополнение к примерам, приведенным в Приложении 1.3.5, табл. 1.3.5-1, необходимо знать следующее: чтобы найти такие элементы матрицы, которые удовлетворяют условию, можно использовать функцию find в сочетании с логическим выражением. Например, find(X<5) возвращает линейные индексы для элементов X , которые имеют значения менее 5.

Чтобы непосредственно найти элементы массива X, которые удовлетворяют условию X<5, можно использовать конструкцию X(X<5), и при этом следует избегать таких конструкций как X(find(X<5)), которые необоснованно используют функцию find с логической матрицей.

В Приложении 1.3, табл. 1.3.5-2приведено описание функции find, gsort , vectorfind .

 

Дата: 2019-11-01, просмотров: 448.