Foro de debate

Sumar elementos de las posiciones pares de un vector

Sumar elementos de las posiciones pares de un vector

de Abelardo Requena Blanco -
Número de respuestas: 7

Hola, verán estoy empezando con el tema de vectores, el caso es que tengo sumar los elementos de las posiciones pares de un vector, y no se muy bien como hacerlo, se sumar los elementos que son pares o impares, pero no se como puedo hacer que detecte si la posición de ese elemento es par y que luego sume el valor de ese elemento y no la posición, no se si me explico...

Les pongo el ejemplo de lo que estoy haciendo por si se entiende mejor:

#Este es el vector

vector<-c(2, 5, 3, 6, 4, 7, 4, 6, 3, 6, 3, 6, 3, 9, 8, 6)

#Creo esta variable para en ella sumar los elementos

SumaPosPar<-0

#inicio un bucle for, y es donde viene el problema no se como indicar que sume los elementos de las posiciones pares en vez de lo elementos pares en si.

for  (i in vector)

  if (i%%2==0)

    SumaPosPar<- SumaPosPar+ i

print(SumaPosPar)


Muchas gracias por adelantado, saludos

En respuesta a Abelardo Requena Blanco

Re: Sumar elementos de las posiciones pares de un vector

de Manuel Muñoz Márquez -

Buenas:

En R los bucles son muy costosos y en la medida de lo posible es conveniente evitarlos, en este caso se puede hacer

> vector<-c(2, 5, 3, 6, 4, 7, 4, 6, 3, 6, 3, 6, 3, 9, 8, 6)
> sum(vector[seq(1,length(vector),2)])
[1] 30

Un saludo.

En respuesta a Manuel Muñoz Márquez

Re: Sumar elementos de las posiciones pares de un vector

de Abelardo Requena Blanco -

Muchas gracias por tu respuesta, al final lo he solucionado con otro método, pero aun asi muy amable.


PD: dejo el método que he usado por si a alguien le sirve en un futuro.

vector<-c(2, 5, 3, 6, 4, 7, 4, 6, 3, 6, 3, 6, 3, 9, 8, 6)


posicion<-0

SumaPosPar<-0


for  (i in vector)

       {(posicion<-posicion+1)

           if (posicion%%2==0)

            (SumaPosPar<- SumaPosPar+ i)}


print(SumaPosPar)



En respuesta a Abelardo Requena Blanco

Re: Sumar elementos de las posiciones pares de un vector

de Manuel Muñoz Márquez -

Buenas:

Tu solución es correcta y en otros lenguajes funcionaría bien, pero en R los bucles son muy lentos. He preparado un ejemplo con el método tuyo y con el mío.

Generamos un vector aleatorio de tamaño n = 100000

n = 100000
x <- runif(n)

Definimos las funciones f y g que hacen los cálculos

f <- function(x) sum(x[seq(2, length(x), 2)])
g <- function(x) {
    posicion<-0
    SumaPosPar<-0
    for  (i in x) {
        posicion<-posicion+1
        if (posicion%%2==0) (SumaPosPar<- SumaPosPar+ i)
    }
    return (SumaPosPar)
}

Llamamos a f y g para comparar las salidas:

> f(x)
[1] 24969.72
> g(x)
[1] 24969.72

¿Cuánto tiempo tardan?

> system.time(f(x))
   user  system elapsed
  0.004   0.000   0.001
> system.time(g(x))
   user  system elapsed
  0.140   0.000   0.133

Es decir, la opción con el bucle tarda 140/4 = 35 veces más.

Si aumentamos n a 1000000

> system.time(f(x))
   user  system elapsed
   0.02    0.00    0.02
> system.time(g(x))
   user  system elapsed
  1.268   0.004   1.220

Es decir, 634 veces más. Si vamos a hacer una sola suma tal vez no nos importe, pero si es un procedimiento que se va a llamar por ejemplo 100, pasamos de 2 segundos a 126.8 segundos, es decir, pasamos de 2 segundos a más de dos minutos.

Moraleja, en R merece la pena buscar la forma de evitar los bucles.

Saludos.

En respuesta a Manuel Muñoz Márquez

Re: Sumar elementos de las posiciones pares de un vector

de Abelardo Requena Blanco -
No sabia que R fuese tan "lento" a la hora de realizar bucles, muchas gracias por el consejo ;)
En respuesta a Abelardo Requena Blanco

Re: Sumar elementos de las posiciones pares de un vector

de jose abadia -

Buenas compañeros, tengo una duda, tengo que hacer un ejercicio en la uni pero no me aclaro me lo piden en mips ensasblador, parece similar al que exponeis

alguien podria ayudarme y decirme el codigo? al menos en c para pasarlo con algun programa on line a mips...


Hacer un programa que permita realizar la suma de los elementos de un vector

(A[]={1,2,3,4,5,6,7}) de 7 elementos el cual se encuentra en memoria. El resultado debe ser llevado

a una variable y almacenado en memoria.

- Explicar qué partes del segmento de datos se van modificando