Luchando con la dinámica ndarray

Soy un usuario de MATLAB. ¿Cuál es la forma más fácil de trasladar el siguiente script de MATLAB a python?

a = [] for i=1:10 for j=1:10 a(i,j) = i*j end end 

La pregunta es acerca del uso dynamic de np.ndarrays. En MATLAB puedo inicializar a como una ndarray genérica (a través de a = []) sin saber su tamaño, luego usar el índice explícito a (i, j). En Python está el método .append, pero al usar ndarrays me confunde, ya que tendría que empaquetar primero el elemento de una fila, luego unir las filas o algo similar. Preferiría la indexación explícita. ¿Es esto posible junto con arreglos dynamics o puede hacerse solo con arreglos de tamaño fijo?

¡Gracias!

Related of "Luchando con la dinámica ndarray"

Mire la pantalla cuando ejecute MATLAB

 a = 1 a = 1 2 a = 1 2 3 a = 1 2 3 4 .... (so on for 100 iterations) 

En octava puedo hacer:

 >> i=1:10 i = 1 2 3 4 5 6 7 8 9 10 >> j=(1:10)' j = 1 2 3 4 5 6 7 8 9 10 >> a=i+j a = 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 6 7 8 9 10 11 12 13 14 15 7 8 9 10 11 12 13 14 15 16 8 9 10 11 12 13 14 15 16 17 9 10 11 12 13 14 15 16 17 18 10 11 12 13 14 15 16 17 18 19 11 12 13 14 15 16 17 18 19 20 

Esto hace uso de la difusión, un concepto tomado de numpy

 In [500]: i=np.arange(1,11) In [501]: a = i[:,None] + i In [502]: a Out[502]: array([[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], [ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]]) 

Esta es la mejor práctica: en general, y me atrevo a decir MATLAB y Octave.

Pero si tienes que usar la iteración haz algo como

 In [503]: a=np.zeros((10,10),int) In [504]: for i in range(10): ...: for j in range(10): ...: a[i,j]=i+j 

O con la iteración completa de la lista de python:

 In [512]: alist = [] In [513]: for i in range(10): ...: sublist=[] ...: for j in range(10): ...: sublist.append(i+j) ...: alist.append(sublist) ...: In [514]: alist Out[514]: [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [5, 6, 7, 8, 9, 10, 11, 12, 13, 14], [6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17], [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]] In [515]: np.array(alist) Out[515]: array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], [ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]]) 

Pero puedo generar una alist más compacta con

 alist=[[i+j for i in range(10)] for j in range(10)] 

Cuando cree una lista de listas, asegúrese de que todas las listas secundarias tengan la misma longitud, o de lo contrario volverá a SO con la pregunta.