Язык программирования R/Математика: различия между версиями

Содержимое удалено Содержимое добавлено
Получение диагонали
Вычленение верхнего угла или нижнего
Строка 164:
 
==== Вычленение верхнего угла или нижнего ====
Для получения верхнего угла можно использовать функцию <code>upper.tri()</code>, нижнего - <code>lower.tri()</code>. Эти функции принимают матрицу в качестве аргумента и возвращают матрицу идентичного размера с элементами типа ''Boolean''. На месте тех членов, которые должны быть включены, стоит ''TRUE'', на месте прочих - ''FALSE''. Дополнительный аргумент <code>diag</code> (по умолчанию ''FALSE'') определяет включать диагональ или нет. Более наглядно работа этих функций видна на примерах:
Upper triangular
<pre width=80>
> (x <- matrix(0:15,ncol=4))
[,1] [,2] [,3] [,4]
[1,] 0 4 8 12
[2,] 1 5 9 13
[3,] 2 6 10 14
[4,] 3 7 11 15
> lower.tri(X)
[,1] [,2] [,3] [,4] [,5]
[1,] FALSE FALSE FALSE FALSE FALSE
[2,] TRUE FALSE FALSE FALSE FALSE
[3,] TRUE TRUE FALSE FALSE FALSE
[4,] TRUE TRUE TRUE FALSE FALSE
[5,] TRUE TRUE TRUE TRUE FALSE
> upper.tri(X, diag=T)
[,1] [,2] [,3] [,4] [,5]
[1,] TRUE TRUE TRUE TRUE TRUE
[2,] FALSE TRUE TRUE TRUE TRUE
[3,] FALSE FALSE TRUE TRUE TRUE
[4,] FALSE FALSE FALSE TRUE TRUE
[5,] FALSE FALSE FALSE FALSE TRUE
</pre>
 
Зная логику работы функций несложно "отрезать" от имеющейся матрицы, например, нижний угол без диагонали:
Lower triangular
<pre width=80>
> Y <- X
> Y[lower.tri(X)] <- 0
> Y
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 0 7 8 9 10
[3,] 0 0 13 14 15
[4,] 0 0 0 4 5
[5,] 0 0 0 0 10
</pre>
 
=== Matrix calculations ===