Je veux pouvoir «construire» un tableau numpy à la volée, je ne connais pas la taille de ce tableau à l'avance.
Par exemple, je veux faire quelque chose comme ça:
a= np.array()
for x in y:
a.append(x)
Ce qui résulterait en un contenant tous les éléments de x, évidemment ceci est une réponse triviale. Je suis juste curieux de savoir si c'est possible?
Construisez une liste Python et convertissez-la en un tableau Numpy. Cela prend O(1) temps amorti par append + + O ( n ) pour la conversion en tableau, pour un total de O ( n ).
a = []
for x in y:
a.append(x)
a = np.array(a)
Tu peux le faire:
a = np.array([])
for x in y:
a = np.append(a, x)
Comme y est un itérable, je ne vois vraiment pas pourquoi les appels à ajouter:
a = np.array(list(y))
va faire et c'est beaucoup plus rapide:
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
Pour la postérité, je pense que cela est plus rapide:
a = np.array([np.array(list()) for _ in y])
Vous pourriez même pouvoir passer dans un générateur (c'est-à-dire [] -> ()), auquel cas la liste interne n'est jamais entièrement stockée en mémoire.
Répondre au commentaire ci-dessous:
>>> import numpy as np
>>> y = range(10)
>>> a = np.array([np.array(list) for _ in y])
>>> a
array([array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object)], dtype=object)
a = np.empty(0)
for x in y:
a = np.append(a, x)