Foro de debate

Sumar elementos de las posiciones pares de un vector

 
Imagen de Abelardo Requena Blanco
Sumar elementos de las posiciones pares de un vector
de Abelardo Requena Blanco - martes, 27 de septiembre de 2016, 19:06
 

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

Imagen de Manuel Muñoz Márquez
Re: Sumar elementos de las posiciones pares de un vector
de Manuel Muñoz Márquez - miércoles, 28 de septiembre de 2016, 07:37
 

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.

Imagen de Abelardo Requena Blanco
Re: Sumar elementos de las posiciones pares de un vector
de Abelardo Requena Blanco - jueves, 29 de septiembre de 2016, 17:38
 

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)



Imagen de Manuel Muñoz Márquez
Re: Sumar elementos de las posiciones pares de un vector
de Manuel Muñoz Márquez - jueves, 29 de septiembre de 2016, 22:39
 

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.

Imagen de Abelardo Requena Blanco
Re: Sumar elementos de las posiciones pares de un vector
de Abelardo Requena Blanco - domingo, 2 de octubre de 2016, 23:57
 
No sabia que R fuese tan "lento" a la hora de realizar bucles, muchas gracias por el consejo ;)
Imagen de Manuel Muñoz Márquez
Re: Sumar elementos de las posiciones pares de un vector
de Manuel Muñoz Márquez - lunes, 3 de octubre de 2016, 07:36
 

Buenas:

Es una característica común de todos los lenguajes interpretados.

Un saludo.

Imagen de jose abadia
Re: Sumar elementos de las posiciones pares de un vector
de jose abadia - miércoles, 27 de marzo de 2019, 16:46
 

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

Imagen de Manuel Muñoz Márquez
Re: Sumar elementos de las posiciones pares de un vector
de Manuel Muñoz Márquez - miércoles, 27 de marzo de 2019, 18:25
 

Buenas Jose:

El mensaje está completamente fuera del propósito de este foro.

Además la forma de trabajar de ensamblador no tiene nada que ver con R

Un saludo.