es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El ciclo R para calcular la MLE es demasiado lento.

Estoy intentando ejecutar el siguiente bucle para calcular la MLE como:

l = matrix(0, tj, n)

Para valores de n o tj mayores a 1000, este bucle será extremadamente lento, ¿hay alguna manera de mejorar este código de manera más eficiente?

Gracias,

for (t in 1:tj) {
  for (k in 1:n) {
    if(S[t]==1) {
      for(c in 1:C) {
        l[t,k]=l[t,k]+(dt*(exp(alpha[c])*exp(-(X[k]-mx[c])^2/2/sx[c]^2))*mvnpdf(x=matrix(m[t,]),mean=mu[[c]],varcovM=sig[[c]], Log = FALSE))*exp(-LAN2[k]*dt)  
      }
    } else { 
      l[t,k]=exp(-LAN2[k]*dt)
    }
  }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunas formas de mejorar la eficiencia de este código:

    1. Vectorización: en lugar de usar bucles anidados, se puede utilizar la vectorización para realizar operaciones en todas las matrices de una vez. Esto puede resultar en una velocidad significativa. Por ejemplo, en lugar de recorrer cada elemento de ‘l’ y actualizarlo usando el bucle ‘for’, podemos actualizar toda la matriz de una vez mediante operaciones de matriz.
    2. Paralelización: si la computadora tiene múltiples núcleos, el uso del procesamiento paralelo puede dividir la carga de trabajo y acelerar el tiempo de cálculo.

    3. Optimización: al analizar el problema, es posible que podamos simplificar las ecuaciones o utilizar métodos numéricos para optimizar el cálculo.

    Sin más información sobre el problema y los datos específicos, es difícil proporcionar una solución más detallada. Sin embargo, las sugerencias anteriores pueden ayudar a mejorar la eficiencia del bucle.

Comments are closed.