Matlab - Duda en ejercicio con Python (Jupyter)

 
Vista:
sin imagen de perfil
Val: 7
Ha aumentado su posición en 10 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Duda en ejercicio con Python (Jupyter)

Publicado por Iván (5 intervenciones) el 13/09/2018 10:25:17
Buenas, estoy empezando en la carrera a usar Python, y me he encontrado con un ejercicio que se me ha atascado, dice asi:

Construir un vector u[i]=i, i=1,....,100000 de las dos formas siguientes:
-Creando un array nulo de tamaño del vector mediante el comando zeros de NumPy y a continuacion usar un bucle for para cambiar convenientemente el contenido de las entradas del array.
-Usando una funcion apropiada de la libreria NumPy.

Mostrar el tiempo de ejecución en los dos casos.

Mi duda y es en donde me atasco, es que no se como hacer el bucle for.
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 JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda en ejercicio con Python (Jupyter)

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 13/09/2018 17:45:03
te dejo las dos formas pero recuerda que en Python el índice inicial es 0 y no 1

1
2
3
4
5
6
7
import numpy as np
u=np.zeros(100000+1,dtype=int)
for i in range(1,100000+1):
    u[i]=i;
print(u)
u2=np.arange(0,100000+1)
print(u2)

ejecución :

[ 0 1 2 ... 99998 99999 100000]
[ 0 1 2 ... 99998 99999 100000]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
4
Comentar
Imágen de perfil de kip
Val: 9
Ha aumentado su posición en 7 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Duda en ejercicio con Python (Jupyter)

Publicado por kip (2 intervenciones) el 13/09/2018 18:22:38
La primera forma me parece inadecuada si estas trabajando sobre Python 2.x ya que creas una lista de 100000, si ya tienes definida la primera por que no usar esa ?

1
2
3
4
5
6
7
8
import numpy as np
 
array = np.zeros(100001, dtype=int)
 
for i, _ in np.ndenumerate(array):
    array[i[0]] = i[0]
 
print(array)

Con Python 3.x no tendras problema de memoria en este caso porque range retorna un objecto generador, que en lugar de crear la lista primero y luego iterar sobre ella, va iterando de manera perezosa lo que quiere decir que no carga en memoria la lista de N elementos.

En el ejemplo que esta mas arriba use ndenumerate que es el metodo que ofrece numpy y por ende el mas optimizado para hacer el trabajo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 10 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Duda en ejercicio con Python (Jupyter)

Publicado por Iván (5 intervenciones) el 05/10/2018 18:46:48
Perdón por la tardanza, muchas gracias por la ayuda a los dos, me ha sido muy útil la ayuda que me habéis prestado!!
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