Cordial saludo. Les agradecería que me ayudaran con una función eficiente para calcular potencias de una matriz. ¿Cuál biblioteca la tiene? Gracias de antemano César Escalante C. [[alternative HTML version deleted]]
Buenas noches César, Si te refieres a tomar cada elemento de una matriz, digamos A, y elevarlos a una potencia k, entonces escribir A^k en la consola del R es más que suficiente. Sea k = 2. Si en vez de lo anterior lo que necesitas es B = A x A (porque k=2), entonces podrías construir una función que lo realice. "A mano" escribirías lo siguiente en la consola: B <- A %*% A B El problema es que cuando k es por ejemplo 10, lo anterior es bastante ineficiente. A continuación te doy varios ejemplos de ambas situaciones. El uso de f1 o f2 depende de tu aplicación. Si ninguna de las dos opciones es lo que buscas, quizás un poco más de detalle podría ayudarnos a ayudarte. De qué dimensión es la matriz A de tu aplicación y qué valores puede tomar k? Una librería que podría ser de utilidad podría ser "Matrix", aunque no la he revisado detalladamente. # Creando una matriz A set.seed(123) A <- matrix(rnorm(4), ncol = 2) A # Elevando cada elemento de A a la potencia k f1 <- function(x,k) x^k f1(A, 2) # A^2 f1(A, 5) # A^5 # Producto matricial de A por si misma k veces f2 <- function(x, k){ r <- diag(dim(x)[2]) for(i in 1:k) r <- r %*% x r } f2(A,2) # A x A f2(A,3) # A x A x A f2(A,5) # A x A x A x A x A Saludos, Jorge Ivan Velez 2009/11/12 Cesar Escalante <>> Cordial saludo. > > Les agradecería que me ayudaran con una función eficiente para calcular > potencias de una matriz. ¿Cuál biblioteca la tiene? > > Gracias de antemano > > > César Escalante C. > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Jorge, Kjetil, muchas gracias. No sabía de la existencia de otras bibliotecas. Al ejecutar el comando install.packages("expm", repos="http://R-Forge.R-project.org<http://r-forge.r-project.org/> ") sale el siguiente mensaje: Warning: unable to access index for repository http://R-Forge.R-project.org/bin/windows/contrib/2.9<http://r-forge.r-project.org/bin/windows/contrib/2.9> Warning message: In getDependencies(pkgs, dependencies, available, lib) : package ‘expm’ is not available Jorge no estoy desarrollando una aplicación concreta. Estaba estudiando y tuve esa necesidad. Ya había escrito una función, pero es mejor saber si existe una escrita en una biblioteca especializada. Miré Matrix y no encuentro la función. Gracias de nuevo. Saludos. César Escalante C. El 13 de noviembre de 2009 10:16, Jorge Ivan Velez <jorgeivanvelez@gmail.com> escribió:> Buenos dias Kjetil y César, > > Sólo para los archivos: si la eficiencia es importante en la aplicación, > el utilizar la función matpow en la libreria expm de R-Forge es muchísimo > mejor. Este es un ejemplo de una matriz A de orden 2x2 cuando k=2 y se > realizan 100000 repeticiones: > > # install.packages("expm", repos="http://R-Forge.R-project.org<http://r-forge.r-project.org/> > ") > require(expm) > > # matpow > system.time(replicate(100000, A %^% 2)) > # user system elapsed > # 0.71 0.02 0.72 > > # f2 > system.time(replicate(100000, f2(A,2))) > # user system elapsed > # 8.92 0.00 8.96 > > Saludos a ambos, > > Jorge Ivan Velez > > 2009/11/13 Kjetil Halvorsen <> > >> El paquete expm, no en CRAN, pero en R-forge, tiene una funci''on >> matpow >> >> Kjetil >> >> 2009/11/13 Jorge Ivan Velez <>: >> >> > Buenas noches César, >> > >> > Si te refieres a tomar cada elemento de una matriz, digamos A, y >> elevarlos a >> > una potencia k, entonces escribir >> > >> > A^k >> > >> > en la consola del R es más que suficiente. >> > >> > Sea k = 2. Si en vez de lo anterior lo que necesitas es B = A x A >> (porque >> > k=2), entonces podrías construir una función que lo realice. "A mano" >> > escribirías lo siguiente en la consola: >> > >> > B <- A %*% A >> > B >> > >> > El problema es que cuando k es por ejemplo 10, lo anterior es bastante >> > ineficiente. >> > >> > A continuación te doy varios ejemplos de ambas situaciones. El uso de f1 >> o >> > f2 depende de tu aplicación. Si ninguna de las dos opciones es lo que >> > buscas, quizás un poco más de detalle podría ayudarnos a ayudarte. De >> qué >> > dimensión es la matriz A de tu aplicación y qué valores puede tomar k? >> > >> > Una librería que podría ser de utilidad podría ser "Matrix", aunque no >> la he >> > revisado detalladamente. >> > >> > # Creando una matriz A >> > set.seed(123) >> > A <- matrix(rnorm(4), ncol = 2) >> > A >> > >> > # Elevando cada elemento de A a la potencia k >> > f1 <- function(x,k) x^k >> > f1(A, 2) # A^2 >> > f1(A, 5) # A^5 >> > >> > # Producto matricial de A por si misma k veces >> > f2 <- function(x, k){ >> > r <- diag(dim(x)[2]) >> > for(i in 1:k) r <- r %*% x >> > r >> > } >> > f2(A,2) # A x A >> > f2(A,3) # A x A x A >> > f2(A,5) # A x A x A x A x A >> > >> > Saludos, >> > >> > Jorge Ivan Velez >> > >> > >> > 2009/11/12 Cesar Escalante <> >> > >> >> Cordial saludo. >> >> >> >> Les agradecería que me ayudaran con una función eficiente para calcular >> >> potencias de una matriz. ¿Cuál biblioteca la tiene? >> >> >> >> Gracias de antemano >> >> >> >> >> >> César Escalante C. >> >> >> >> [[alternative HTML version deleted]] >> >> >> >> >> >> _______________________________________________ >> >> R-help-es mailing list >> >> R-help-es@r-project.org >> >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> >> >> > >> > [[alternative HTML version deleted]] >> > >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es@r-project.org >> > https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> > >> >> >> >> -- >> "... an entire human genome would fit on a music CD." >> >> --- www.thinkgene.com >> > >[[alternative HTML version deleted]]
Buenas tardes César, Es sólo un warning. Qué pasa cuando escribes library(expm) despues de install.packages(...)? Cuál es tu sessionInfo()? Si no puedes utilizar matpow, entonces actualiza tu versión de R (veo que tienes 2.9.2) y ejecuta de nuevo install.packages("expm", repos="http://R-Forge.R-project.org<http://r-forge.r-project.org/> ") require(expm) Seguramente una vez hagas lo anterior, todo funcionará. Si aún después de hacer lo anterior no funciona, entonces ingresa a http://r-forge.r-project.org/R/?group_id=107, descarga manualmente el archivo .zip y luego utiliza Packages -> Install Packages from zip files... en la consola del R. Esta es mi sessionInfo(): R version 2.10.0 Patched (2009-10-26 r50212) i386-pc-mingw32 locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] tools_2.10.0 Espero sea de utilidad, Jorge Ivan Velez 2009/11/13 Cesar Escalante <>> Jorge, Kjetil, muchas gracias. > No sabía de la existencia de otras bibliotecas. > > Al ejecutar el comando > install.packages("expm", repos="http://R-Forge.R-project.org<http://r-forge.r-project.org/> > ") > > sale el siguiente mensaje: > > Warning: unable to access index for repository > http://R-Forge.R-project.org/bin/windows/contrib/2.9<http://r-forge.r-project.org/bin/windows/contrib/2.9> > Warning message: > In getDependencies(pkgs, dependencies, available, lib) : > package ‘expm’ is not available > > Jorge no estoy desarrollando una aplicación concreta. Estaba estudiando y > tuve esa necesidad. Ya había escrito una función, pero es mejor saber si > existe una escrita en una biblioteca especializada. > > Miré Matrix y no encuentro la función. > > Gracias de nuevo. > > Saludos. > > César Escalante C. > > > > El 13 de noviembre de 2009 10:16, Jorge Ivan Velez <> escribió: > > Buenos dias Kjetil y César, >> >> Sólo para los archivos: si la eficiencia es importante en la aplicación, >> el utilizar la función matpow en la libreria expm de R-Forge es muchísimo >> mejor. Este es un ejemplo de una matriz A de orden 2x2 cuando k=2 y se >> realizan 100000 repeticiones: >> >> # install.packages("expm", repos="http://R-Forge.R-project.org<http://r-forge.r-project.org/> >> ") >> require(expm) >> >> # matpow >> system.time(replicate(100000, A %^% 2)) >> # user system elapsed >> # 0.71 0.02 0.72 >> >> # f2 >> system.time(replicate(100000, f2(A,2))) >> # user system elapsed >> # 8.92 0.00 8.96 >> >> Saludos a ambos, >> >> Jorge Ivan Velez >> >> 2009/11/13 Kjetil Halvorsen <> >> >>> El paquete expm, no en CRAN, pero en R-forge, tiene una funci''on >>> matpow >>> >>> Kjetil >>> >>> 2009/11/13 Jorge Ivan Velez <>: >>> >>> > Buenas noches César, >>> > >>> > Si te refieres a tomar cada elemento de una matriz, digamos A, y >>> elevarlos a >>> > una potencia k, entonces escribir >>> > >>> > A^k >>> > >>> > en la consola del R es más que suficiente. >>> > >>> > Sea k = 2. Si en vez de lo anterior lo que necesitas es B = A x A >>> (porque >>> > k=2), entonces podrías construir una función que lo realice. "A mano" >>> > escribirías lo siguiente en la consola: >>> > >>> > B <- A %*% A >>> > B >>> > >>> > El problema es que cuando k es por ejemplo 10, lo anterior es bastante >>> > ineficiente. >>> > >>> > A continuación te doy varios ejemplos de ambas situaciones. El uso de >>> f1 o >>> > f2 depende de tu aplicación. Si ninguna de las dos opciones es lo que >>> > buscas, quizás un poco más de detalle podría ayudarnos a ayudarte. De >>> qué >>> > dimensión es la matriz A de tu aplicación y qué valores puede tomar k? >>> > >>> > Una librería que podría ser de utilidad podría ser "Matrix", aunque no >>> la he >>> > revisado detalladamente. >>> > >>> > # Creando una matriz A >>> > set.seed(123) >>> > A <- matrix(rnorm(4), ncol = 2) >>> > A >>> > >>> > # Elevando cada elemento de A a la potencia k >>> > f1 <- function(x,k) x^k >>> > f1(A, 2) # A^2 >>> > f1(A, 5) # A^5 >>> > >>> > # Producto matricial de A por si misma k veces >>> > f2 <- function(x, k){ >>> > r <- diag(dim(x)[2]) >>> > for(i in 1:k) r <- r %*% x >>> > r >>> > } >>> > f2(A,2) # A x A >>> > f2(A,3) # A x A x A >>> > f2(A,5) # A x A x A x A x A >>> > >>> > Saludos, >>> > >>> > Jorge Ivan Velez >>> > >>> > >>> > 2009/11/12 Cesar Escalante <> >>> > >>> >> Cordial saludo. >>> >> >>> >> Les agradecería que me ayudaran con una función eficiente para >>> calcular >>> >> potencias de una matriz. ¿Cuál biblioteca la tiene? >>> >> >>> >> Gracias de antemano >>> >> >>> >> >>> >> César Escalante C. >>> >> >>> >> [[alternative HTML version deleted]] >>> >> >>> >> >>> >> _______________________________________________ >>> >> R-help-es mailing list >>> >> R-help-es@r-project.org >>> >> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >> >>> >> >>> > >>> > [[alternative HTML version deleted]] >>> > >>> > >>> > _______________________________________________ >>> > R-help-es mailing list >>> > R-help-es@r-project.org >>> > https://stat.ethz.ch/mailman/listinfo/r-help-es >>> > >>> > >>> >>> >>> >>> -- >>> "... an entire human genome would fit on a music CD." >>> >>> --- www.thinkgene.com >>> >> >> >[[alternative HTML version deleted]]