Foro

¡AYUDA CON EL MALDITO PYTHON! Me estoy desesperando!!!!

Otros lugares, otras opciones :: Sin clasificar :: ¡AYUDA CON EL MALDITO PYTHON! Me estoy desesperando!!!!

Este hilo ha sido cerrado.
09/12/2018, 02:21
Editado: 09/12/2018, 02:23

Hola a todos, en primer lugar pido disculpas, se que esto no va acá, no tengo muy claro en que foro iría, pero estoy un poco desesperado y este es el primer foro que aparece, asi que hay más chances de que lo lean. Luego lo borran, solo aguantenlo hasta el lunes. Paso a explicar el problema.

Tengo que entregar unos ejercicios de programación de Python 2 el lunes, son para una materia de neurociencia, los tengo casi resueltos salvo uno que es un clavo en el costado, y encima yo soy un analfabeto total programando.

Resumo el problema:

voltajes1, voltajes2, espigas1, espigas2, inputs, t=redLIF(amp,tMax)

RedLIF es una función que me calcula cosas, en funcion de un tiempo y de una corriente. No importa mucho lo que hace igual, solo que le doy dos valores y me fabrica un modelo de como dos neuronas hablan entre si. Entonces, en el ejercicio el tMax siempre vale 100, pero amp va cambiando.

En el ejercicio entonces yo hago (con esos valores de ejemplo):

voltajes1, voltajes2, espigas1, espigas2, inputs, t=redLIF(10,100)

HAGO COSAS PARA CALCULAR LA FRECUENCIA DE LAS NEURONAS

GUARDO ESA FRECUENCIA EN UN VECTOR.

Esto me funciona perfecto, y si lo vuelvo a repetir cambiando el valor 10 por 15, 20, etc. me va haciendo un vector cada vez mas grande con la frecuencia de las neuronas a 10, 15, 20, etc.

¿Se entiende?

Ahora, mi problema es que ellos no quieren que yo entregue el ejercicio con 5 cuadrados gigantes en los que se vaya cambiando el valor, ellos quieren un solo cuadrado en donde, mediante un for, calcule las frecuencias para 5, 10, 15, 20 y fabrique el vector. Yo estoy intentando lograr eso y no puedo!!!

Esto es lo que tengo:

N = np.array([0, 5, 10, 15]) #acá intento crear un vector con los números, con que vaya del 0 al 30 de 5 en 5 está perfecto, no preciso más valores

for i in N: #acá intento armar el for
    voltajes1, voltajes2, espigas1, espigas2, inputs, t=redLIF(N, 100) #ahí, donde dice N, es que quiero que el programa me vaya tomando los valores del vector en orden, primero el 0, luego el 5, etc. para poder hacer lo que sigue, que ya me funciona.
           

        CALCULAR FRECUENCIA

         METER EN VECTOR

Realmente, esto debe ser una estupidez para alguien que sepa, pero yo no puedo, estoy desde la madrugada con esto y no me sale. Por favor, agradecería muchísimo la ayuda de la gente de este foro que sabe programar. Después arreglamos la recompensa, un par de meses de Netflix, o piden unas pizzas a cuenta mía. Estoy enloqueciendo ya.

Gracias a todos!!!!! Voy a estar dandole al F5!

09/12/2018, 02:41

Buenas, no se si entiendo del todo bien lo que quieres hacer y Phyton no es un lenguaje que use pero me da la impresión que en la llamada a redLIF(N, 100)  deberías usar i en vez de N para pasar el valor de la iteración no todo el array ¿no?

¿Que error te da o simplemente no hace lo que quieres? 

09/12/2018, 03:20
Editado: 09/12/2018, 03:21

Muchas gracias por la respuesta rápida!

 

no se si entiendo del todo bien lo que quieres hacer

Capaz me explayé demasiado con la explicación, pero básicamente quiero que una función redLIF me agarre cada elemento de un vector, uno por uno, y haga los mismos cálculos para cada elemento.

Y no se como hacer eso.

deberías usar i en vez de N 

Acabo de probar lo que me diiste, y cuando hago redLIF(i, 100) me da un vector lleno de ceros, no entiendo por qué, siendo que cuando hago redLIF(5,100) (por ejemplo) me da un numero.

09/12/2018, 03:55

Yo no lo termino de entender.

Ahora, mi problema es que ellos no quieren que yo entregue el ejercicio con 5 cuadrados gigantes en los que se vaya cambiando el valor, ellos quieren un solo cuadrado en donde, mediante un for, calcule las frecuencias para 5, 10, 15, 20 y fabrique el vector. Yo estoy intentando lograr eso y no puedo!!!

El término cuadrado me hace pensar en una potencia elevada al cuadrado. Así que estoy algo perdido.

 

Para explicarte mejor, podrías indicar dado el vector de entradas que inicializas, ¿cuál es el resultado esperado? es decir, ¿qué se supone que debes presentar luego de hacer los ciclos? ¿Un vector de vectores con los parámetros del modelo de RedIf? 

09/12/2018, 04:09
Editado: 09/12/2018, 04:28

El término cuadrado me hace pensar en una potencia elevada al cuadrado. Así que estoy algo perdido.

El termino "cuadrado" se refiere (de forma poco profesional) a los box de python donde escribo el código, no es nada matemático.

Voy a intentar adjuntar capturas de pantalla, no se si aclararán algo. Lo que quiero hacer (resumido) es: que una función redLIF me agarre cada elemento de un vector, uno por uno, y haga los mismos cálculos para cada elemento. Luego ponga los resultados de cada ciclo en un vector.


Por ejemplo: esto me da cuando le pongo valor 10:

Me da dos vectores (porque son dos neuronas), cada uno con un número correspondiente al valor 10. Esto funciona, me da lo que yo quiero! (y las cajitas son lo que yo llamo cuadrados)


Ahora esto pasa cuando hago lo mismo con el for:

Vean que le puse solo el valor 10 para asegurarme que el error no fuese el 0.

PD: el vector se llama N y en el for puse inj, no hagan caso, aunque diga N en los dos lados el resultado es el mismo.

09/12/2018, 04:16
Editado: 09/12/2018, 04:16

Ah vale, pues entonces sí es como dice machera:

 

freqs = []

for i in N: 
    voltajes1, voltajes2, espigas1, espigas2, inputs, t=redLIF(i, 100)           

     freqs.append(calcularFrecuencia(voltajes1, voltajes2, espigas1, espigas2))

return freqs / print(freqs)

Si te está dando ceros, los culpables son la función redLIF o calcularFrecuencia, de las que no sabemos nada.

09/12/2018, 04:34

Ahí metí unas capturas a ver si logran explicar mejor mi problema. Básicamente no entiendo que estoy haciendo distinto en el segundo escenario, que no me da lo mismo que en el primero.

09/12/2018, 04:48
Editado: 09/12/2018, 04:50

Algunas observaciones:

1. Parecería que sólo hay un valor en inj en el último ejemplo. Además estás añadiendo "espigas1" al arreglo de frecuencias, cuando probablemente quieras agregarlo al arreglo frecuencias2. 

2. Asumiré que sp es numpy, por lo que si te está dando 0s la única conclusión lógica es que espigas1 está lleno de ceros, demostrado por el print que haces.

3. Los "cuadrados" son los bloques de código del python notebook. 

 

Entonces pregunto. ¿Es inj el arreglo de objetos? ¿O es inj un range(0,n) donde n es el número de elementos y le estás mandando 0 por defecto? Sospecho que el valor que te da para 0 es 0 (pruebalo en el ejemplo 1), y verifica que inj está bien organizado.

P.D: Pronto vienen los esqueletos. Métete al discord.

P.D2: ¿No deberías llamar calcularFrecuencias sobre Espigas1 y no sobre Espigas1[i]? No veo razón para hacer eso basado en tu primer ejemplo.

09/12/2018, 05:46

Si, habia varias cosas mal, lo fui depurando gracias a sus consejos pero el tema de los ceros no me lo puedo quitar de encima. Es como si no me tomara los valores que están dentro del vector, y no tengo idea que es lo que me toma.

Lo que yo se es que fuera del loop funciona todo perfecto! Muchas gracias Daraexus y Machera, me voy a ir a dormir porque se me abre la cabeza, y mañana ya veré si lo puedo solucionar.

Quiero resumir lo que me dijeron en esto:

Para que una funcion me tome los valores de un vector se escribe asi:

Vector= sp.array([1, 2, 3, 4])

for i in Vector:

FUNCION (i)

09/12/2018, 10:53
Editado: 09/12/2018, 10:54

Si el problema te lo da el for prueba a hacer lo siguiente:

For I in (Inicio,fin,Paso):
Función(i)

Inicio es el valor inicial, fin el final y paso el valor de incremento. Si haces un for de (0,50,5) te cogerá los valores 0, 5,10....

Si no te funciona pon el código entero en Google Drive y le echo un vistazo a ver si veo algo
Pd. Desde el móvil, no puedo poner bien las mayúsculas, identaciones, etc...

10/12/2018, 00:50

Bueno gente, hoy volvi del trabajo y me senté a resolver esto por última vez, con la cabeza despejada, mucha paciencia, una taza de café y un pote de helado (acá hay como 25 grados a las 7 de la tarde).

Unifiqué todas las recomendaciones y correcciones que me hicieron, y llegué a esto:

Y FUNCIONA! FUNCIONA! JAJAJA muchas gracias a todos! Me salvaron la plata! Son unos genios jaja

Después el ejercicio seguía y llegué a esto:

Como ven, la Neurona Presinaptica (eje x) sigue disparando como loca cuando aumento la corriente (ese numero que me ayudaron a meter en la funcion), pero la Postsinaptica se satura, y llega a 25 disparos y no le puede seguir el ritmo a la otra.

Con esto, se da por concluido el ejercicio, se descarga, y se manda a corregir. Muchas gracias de nuevo, después discutimos los honorarios. En principio, si quieren venir de visita a Uruguay, sepan que tienen alojamiento y alcohol gratis.

Como dice el dicho, con mucha paciencia, saliva, y ayuda de Umbría; el elefante se empomó a la hormiga en Python.

10/12/2018, 10:30

Entonces ya no hay plata ni netflix para todos??? Como sois los magos, después de entregar las prácticas no me acuerdo XDDDD

Nada hombre, feliz de dar una mano :)

10/12/2018, 13:24

Yo espero mi pago en lechugas sin marcar en los próximos días.

Este hilo ha sido cerrado.