Inicializar matriz de números de longitud desconocida

Quiero poder “construir” una matriz numpy sobre la marcha, no sé el tamaño de esta matriz de antemano.

Por ejemplo quiero hacer algo como esto:

a= np.array() for x in y: a.append(x) 

Lo que resultaría en que contenga todos los elementos de x, obviamente esta es una respuesta trivial. Sólo tengo curiosidad de si esto es posible?

Cree una lista de Python y conviértala en una matriz de Numpy. Eso lleva amortizado O (1) tiempo por anexo + O ( n ) para la conversión a la matriz, para un total de O ( n ).

  a = [] for x in y: a.append(x) a = np.array(a) 

Puedes hacerlo:

 a = np.array([]) for x in y: a = np.append(a, x) 

Dado que y es un iterable realmente no veo por qué las llamadas a adjuntar:

 a = np.array(list(y)) 

Lo haré y es mucho más rápido:

 import timeit print timeit.timeit('list(s)', 's=set(x for x in xrange(1000))') # 23.952975494633154 print timeit.timeit("""li=[] for x in s: li.append(x)""", 's=set(x for x in xrange(1000))') # 189.3826994248866 

Para la posteridad, creo que esto es más rápido:

 a = np.array([np.array(list()) for _ in y]) 

Incluso puede pasar un generador (es decir, [] -> ()), en cuyo caso la lista interna nunca se almacena completamente en la memoria.


Respondiendo al comentario a continuación:

 >>> import numpy as np >>> y = range(10) >>> a = np.array([np.array(list) for _ in y]) >>> a array([array(, dtype=object), array(, dtype=object), array(, dtype=object), array(, dtype=object), array(, dtype=object), array(, dtype=object), array(, dtype=object), array(, dtype=object), array(, dtype=object), array(, dtype=object)], dtype=object) 
 a = np.empty(0) for x in y: a = np.append(a, x)