5 Funciones
Julia y los paquetes que amplían sus capacidades proveen muchas funciones para realizar operaciones matemáticas y analizar datos. Para ordenar la discusión, categorizamos dichas funciones en matriciales, vectoriales y escalares.
Aquí presentamos sólo algunos ejemplos de las funciones que les serán más útiles.
5.1 Funciones Escalares
Las funciones escalares aplican operaciones sobre escalares. Son utilizables en escalares, vectores y matrices (y en general en cualquier Arreglo multidimensional). En el caso de los dos primeros, la operaciones se realizan elemento por elemento.
Algunos ejemplos:
sin
,cos
: Seno, Cosenoexp
,log
,log10
,abs
: Exponencial, logaritmo natural, logaritmo base 10 Valor absolutosign
: Signo (1 para positivo, -1 para negativo, 0 para cero)round
,ceil
,floor
: Redondea a entero
7.38905609893065
-0.4161468365471424
0.6931471805599453
2.2
Para aplicar funciones escalares a vectores y matrices usamos la construcción funcion.()
, indicando así que la operación será realizada con cada elemento escalar que compone el vector o la matriz. Por ejemplo, usando un vector:
2-element Array{Float64,1}:
7.38905609893065
20.085536923187668
Ahora usando una matriz:
2×2 Array{Float64,2}:
-1.75642 -2.47962
-0.244705 -1.8672
Otras funciones escalares útiles son:
2.0
2.0
1.0
-1
5.2 Funciones Vectoriales
Las funciones vectoriales aplican operaciones sobre vectores. Son utilizables en vectores y matrices. En el caso de las segundas, las operaciones se aplican por fila o por columna.
Algunos ejemplos:
maximum
,minimum
,findmax
,findmin
: Máximo, mínimo.length
: Tamaño de un vectorsort
,sortrows
: Ordenar vector, ordenar filas de una matrizsum
,prod
,cumsum
,cumprod
: Suma, producto, suma acumulada, producto acumuladomean
,std
,median
,var
,cov
: Media, desviación estándar, mediana, varianza, covarianza (para estas funciones se usa el paquete Statistics que viene en la instalación Base de Julia).
Ejemplo:
6×1 Array{Float64,2}:
0.5714666579881484
0.41454651823739486
0.7423252568236218
0.8653171543587022
0.21238998257389796
0.3723851947176551
0.8653171543587022
0.21238998257389796
6
Las funciones vectoriales, según la operación que realicen tienen diversas opciones y posiblemente entregan más de un resultado. Ver opciones de cada función usando ?funcion
.
- Ejemplo de uso de funciones con más de un argumento de la función:
5×3 Array{Float64,2}:
0.468011 0.190221 0.878875
0.777597 0.458129 0.956853
0.963205 0.0919655 0.606627
0.247977 0.149666 0.196096
0.90866 0.900251 0.445866
0.935572586895675
Note que la función maximum()
encuentra el máximo dentro de todos los elementos. Si nos interesa buscar el máximo por filas o por columnas utilizamos la opción dims
:
1×3 Array{Float64,2}:
0.907517 0.935573 0.910205
5×1 Array{Float64,2}:
0.8190659153938897
0.33200993069149387
0.5656425924230455
0.910205063785412
0.935572586895675
Esta misma lógica aplica a funciones como sum()
, prod()
, cumsum()
y cumprod()
(en el caso de los dos últimos la dimensión es un argumento obligatorio). Ejemplo:
5×3 Array{Float64,2}:
0.819066 0.413214 0.619649
1.15108 0.728593 0.880318
1.68734 0.812171 1.44596
2.59486 1.43562 2.35617
3.2942 2.37119 2.68509
Las funciones findmax
y findmin
son ejemplos de funciones que tienen más de un resultado. En este caso, el valor del máximo (mínimo) y la posición del mismo. Ejemplo:
(0.963204864575407, CartesianIndex(3, 1))
Lo que indica que el máximo de \(G\) es 0.96 y la posición dentro la matriz es fila 3 y columna 1. Para acceder a la fila y columna de posind
usamos el índice ordinal:
3
1
Cuando definimos la orientación fila o columna, findmax
entregara el valor y la posición en cada fila o columna.
([0.963205 0.900251 0.956853], CartesianIndex{2}[CartesianIndex(3, 1) CartesianIndex(5, 2) CartesianIndex(2, 3)])
CartesianIndex(3, 1)
Note que usamos indexación para acceder a cada posición. Para para acceder al valor fila o columna de la fila o columna correspondiente usamos doble indexación:
1
Las funciones estadísticas como mean
, std
, median
, var
y cov
, entre otras, son fundamentales en el análisis de datos. Para usarlas en Julia necesitamos primero cargar el paquete Statistics
que viene en la instalación base de Julia.
0.5493332362365936
1×3 Array{Float64,2}:
0.67309 0.358046 0.616863
5×1 Array{Float64,2}:
0.5123689853589612
0.7308597059953457
0.5539325353975396
0.19791281818954234
0.7515921362415785
0.32653109009181447
1×3 Array{Float64,2}:
0.67309 0.358046 0.616863
Para calcular covarianzas a partir de dos vectores usamos:
1×1 Array{Float64,2}:
0.015762767459558256
5.3 Funciones Matriciales
La funciones matriciales realizan operaciones sobre matrices y sólo son utilizables con este tipo de objetos.
Algunos ejemplos:
size
: Tamaño de la matriz.inv
: Inversa (es mejor utilizar /).eig
: Autovalores y autovectores.cholesky
: Descomposición de Choleskydet
: Determinante.kron
: Producto de kronecker.:
Convierte un matriz en un vector columna: vectorizar A[:].reshape(A,filas,columnas)
: Cambio de dimensión.diag
: Diagonal de una matriz (además matriz diagonal si el argumento es un vector).triu
,tril
: Matrices triangulares, superior e inferior.
Para contar con la funcionalidad del álgebra lineal debemos cargar el paquete LinearAlgebra
:
Creamos una matriz \(3 \times 3\) con números aleatorios para generar ejemplo sobre las funciones matriciales:
3×3 Array{Float64,2}:
0.854378 0.357735 0.320768
0.751719 0.00107406 0.06885
0.945119 0.46043 0.597043
El determinante de la matriz:
-0.05311570062090768
La inversa de la matriz:
3×3 Array{Float64,2}:
0.584749 1.24053 -0.457219
7.22456 -3.89595 -3.4322
-6.49712 1.04074 5.04556
Los elementos de la diagonal principal son:
3-element Array{Float64,1}:
0.854378426292786
0.00107406348726502
0.5970430661012691
Para construir una matriz diagonal a partir de un vector usamos diagm()
con la opción 0 =>
para indicar que el vector poblará la diagonal principal:
4×4 Array{Int64,2}:
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
Para vectorizar una matriz usamos [:]
o reshape(A,numfilas,1)
(el primer caso convierte la matriz en un Arreglo de una dimensión, mientras que el segundo convierte la matriz en un vector fila/columna dependiendo de las dimensiones):
9-element Array{Float64,1}:
0.854378426292786
0.7517194056123091
0.9451193092573495
0.3577347741422632
0.00107406348726502
0.46043031649101995
0.3207684393106236
0.06884996935714605
0.5970430661012691
9×1 Array{Float64,2}:
0.854378426292786
0.7517194056123091
0.9451193092573495
0.3577347741422632
0.00107406348726502
0.46043031649101995
0.3207684393106236
0.06884996935714605
0.5970430661012691
Calculamos los autovalores y autovectores de una matriz usando eigen()
:
Eigen{Float64,Float64,Array{Float64,2},Array{Float64,1}}
eigenvalues:
3-element Array{Float64,1}:
1.4903935251619282
0.17078180535293447
-0.2086797746335427
eigenvectors:
3×3 Array{Float64,2}:
-0.563894 -0.180407 0.237944
-0.319819 -0.442791 -0.936864
-0.761406 0.878288 0.25626
3-element Array{Float64,1}:
1.4903935251619282
0.17078180535293447
-0.2086797746335427
3×3 Array{Float64,2}:
-0.563894 -0.180407 0.237944
-0.319819 -0.442791 -0.936864
-0.761406 0.878288 0.25626
Obtenemos matrices triangulares a partir de una matriz usando triu()
(superior) y tril()
(inferior):
4×4 Array{Float64,2}:
1.0 0.0 0.0 0.0
1.0 1.0 0.0 0.0
1.0 1.0 1.0 0.0
1.0 1.0 1.0 1.0
4×4 Array{Float64,2}:
1.0 1.0 1.0 1.0
0.0 1.0 1.0 1.0
0.0 0.0 1.0 1.0
0.0 0.0 0.0 1.0
Para crear una matriz de tamaño \(4 \times 4\) y rellenarla del valor 5.0 usamos fill()
:
4×4 Array{Float64,2}:
5.0 5.0 5.0 5.0
5.0 5.0 5.0 5.0
5.0 5.0 5.0 5.0
5.0 5.0 5.0 5.0
Finalmente, podemos transformar vectores en matrices usando reshape()
:
9-element Array{Int64,1}:
1
2
3
4
5
6
7
8
9
3×3 Array{Int64,2}:
1 4 7
2 5 8
3 6 9