Siddhartha escribió:
.
Roderic escribió:
¡¡Pues muchas gracias a los dos!!
Me acabo de poner con ello y aqui tengo el resultado.
He creado un nuevo enunciado que me sera mas facil para poder explicar el ejercicio calculando el volumen de un hexaedro y la suma de sus tres lados variando los lados de la siguiente forma
c=10 20 30 (seria la profundidad)
b=2 4 6 8 10
a=1 2 3 4 5
he conseguido con el broadcasting hacer un array en la cual la primera dimension son los valores C, la siguiente los de B y la penultima los de A y operando en dos columnas el volumen y la suma de los lados
He aqui el resultado
Código: Seleccionar todo
from numpy import *
def funcion (a,b,c):
return array([a*b*c,a+b+c]).T
a=arange(10,31,10)
b=arange(2,10,2)
c=arange(1,6,1)
tama=size(a)
tamb=size(b)
tamc=size(c)
print "a: ",a
print "b: ",b
print "c: ",c
nb=b.reshape(tamb,1)
unos2D=ones((tamb,tamc),float)
nb=unos2D*nb
nb=nb
nc=c.reshape(tamc,1)
unos2D=ones((tamb,tamc),float)
nc=unos2D*nc.T
nc=nc
print "nb"
print nb
print "nc"
print nc
unos3D=ones((tama,tamb,tamc),float)
nnb=nb.reshape(1,tamb,tamc)
nnb=nnb*unos3D
nnc=nc.reshape(1,tamb,tamc)
nnc=nnc*unos3D
print "nnb"
print nnb
print "nnc"
print nnc
nna=a.reshape(tama,1,1)
nna=nna*unos3D
print "nna"
print nna
total=size(nna)
a1D=nna.reshape(total)
b1D=nnb.reshape(total)
c1D=nnc.reshape(total)
print a1D
print b1D
print c1D
print "volumen / suma de los lados"
mat=funcion (a1D,b1D,c1D)
print mat
print mat.reshape(tama,tamb,tamc,2)
Y este es el array obtenido
Código: Seleccionar todo
[[[[ 20. 13.]
[ 40. 14.]
[ 60. 15.]
[ 80. 16.]
[ 100. 17.]]
[[ 40. 15.]
[ 80. 16.]
[ 120. 17.]
[ 160. 18.]
[ 200. 19.]]
[[ 60. 17.]
[ 120. 18.]
[ 180. 19.]
[ 240. 20.]
[ 300. 21.]]
[[ 80. 19.]
[ 160. 20.]
[ 240. 21.]
[ 320. 22.]
[ 400. 23.]]]
[[[ 40. 23.]
[ 80. 24.]
[ 120. 25.]
[ 160. 26.]
[ 200. 27.]]
[[ 80. 25.]
[ 160. 26.]
[ 240. 27.]
[ 320. 28.]
[ 400. 29.]]
[[ 120. 27.]
[ 240. 28.]
[ 360. 29.]
[ 480. 30.]
[ 600. 31.]]
[[ 160. 29.]
[ 320. 30.]
[ 480. 31.]
[ 640. 32.]
[ 800. 33.]]]
[[[ 60. 33.]
[ 120. 34.]
[ 180. 35.]
[ 240. 36.]
[ 300. 37.]]
[[ 120. 35.]
[ 240. 36.]
[ 360. 37.]
[ 480. 38.]
[ 600. 39.]]
[[ 180. 37.]
[ 360. 38.]
[ 540. 39.]
[ 720. 40.]
[ 900. 41.]]
[[ 240. 39.]
[ 480. 40.]
[ 720. 41.]
[ 960. 42.]
[ 1200. 43.]]]]
Tengo que pulirlo, porque creo que doy demasiadas vueltas con el reshape y el broadcasting, pero es que primero quise crear uno en el cual no fuera necesario variar c y si a y b par facilitar la explicacion en clase y a partir de ese crear el del examen.
Muchas gracias otra vez!
Que Dios os lo pague con muchos hijos