Python - Sumar y dividir un array por un escalar.

   
Vista:
Imágen de perfil de Zhisi

Sumar y dividir un array por un escalar.

Publicado por Zhisi (21 intervenciones) el 27/10/2017 17:07:13
Hola!

Tengo un array y quiero sumar el mismo número a todos sus elementos. Por ejemplo, si tengo a=[1,2,3] quiero sumarles 10 a cada elemento para obtener b=[11,12,13].

¿Cómo puedo hacerlo sin usar un bucle?

Y la misma duda si lo que quiero es multiplicar o dividir todos los elementos por el mismo número.


Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip

Sumar y dividir un array por un escalar.

Publicado por kip (204 intervenciones) el 27/10/2017 23:17:32
Usando map() y una funcion lambda, algo asi:

1
print(list(map(lambda x: x + 10, [1,2,3])))

1
print(list(map(lambda x: x * 10, [1,2,3])))

1
print(list(map(lambda x: x / 10, [1,2,3])))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sumar y dividir un array por un escalar.

Publicado por tincopasan (111 intervenciones) el 28/10/2017 04:05:40
No entiendo porque no usar bucles, pero siempre se puede acceder a cada uno de los elementos del array, esta no es la mejor forma pero es a tipo de ejemplo:
1
2
3
4
5
6
7
a=[1,2,3]
b=[]
b.append(a[0]+ 10) #accedo a cada elemento de forma individual sumandole 10 y lo agrego al array b que hasta ahora está vacío
b.append(a[1]+ 10) #lo mismo con el elemento que sigue
b.append(a[2]+ 10)
print(a)
print(b)

insisto que no es la mejor forma, pero es simple de entender y aplicar después
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

Sumar y dividir un array por un escalar.

Publicado por kip (204 intervenciones) el 28/10/2017 05:30:01
Estoy de acuerdo con Tincopasan, sobre todo si estas iniciando eso te ayudara mucho, despues podrias aplicar algo de 'azúcar sintáctico' del lenguaje que en este caso serian la compresion de listas:


1
print( [ n + 10 for n in [1, 2, 3] ] )

Lo importante siempre va a ser experimentar y con esto entender el lenguaje.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Zhisi

Sumar y dividir un array por un escalar.

Publicado por Zhisi (21 intervenciones) el 30/10/2017 09:39:00
Lo de no querer usar un bucle es porque quiero que el código sea lo más compacto posible y porque el número de elementos del array puede variar y yo no saber cuál es su tamaño. Además tengo un código de otro programa donde tengo lo siguiente:
1
prom=prom/maxprom
Siendo prom un array con valores (promedios de un cálculo anterior) y maxprom el valor máximo de promcol. Así normalizo todo el array a la unidad de modo que todos los elementos de prom sean valores en el intervalo 0-1. Resumiendo, estoy dividiendo un array entre un escalar y funciona.
Sin embargo, ahora estoy con esta otra línea en la que (creo) estoy aplicando algo similar (trabajar directamente sobre un array aplicando funciones y operaciones "simples") pero no funciona.
1
y = np.int((np.sign(aux)+1)/2)
aux es un array con elementos en el intervalo 0-1 y lo que quiero haceres lo siguiente:
-Aplicar la función signo (sign) a cada elemento de aux. De modo que el array se convierta en un array con -1,0,+1.
-Sumar 1 a todos los elementos de aux. Con esto consigo que todos los elementos tengan valores de 0, 1, 2.
-Dividir entre 2 todos los elementos de aux. Con ello logramos que los elementos del array valgan 0,0.5,1.
-Aplicamos la función entero (int). El resultado es que todos los elementos del array valgan 0 ó 1.

¿Por qué en el primer ejemplo el algoritmo funciona pero en el segundo no?

Si no consigo que funcione como lo he plantea, haré un bucle, pero me gustaría entender por qué no funciona mi código y hacerlo lo más compacto posible.

Muchas gracias!



PD: He modificado el código para ponerlo por partes y el problema está al aplicar la función entero (int) sobre el array.
1
2
3
4
5
6
aux = np.sign(aux)
    aux = (aux + 1)/2
    print aux
 
    y = np.int(aux)
    print y
El valor que me muestra en pantalla del array aux es el correcto. Sin embargo no llega a imprimir por pantalla el array y. Es decir, el problema lo tengo al aplicar int sobre el array. ¿Por qué?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar