172 votes

initialiser un tableau numpy

Est-il moyen d'initialiser un tableau numpy d'une forme et d'y ajouter? Je vais vous expliquer ce que j'ai besoin d'une liste exemple. Si je veux créer une liste d'objets produits dans une boucle, je peux faire:

a = []
for i in range(5):
    a.append(i)

Je veux faire quelque chose de similaire avec un tableau numpy. Je sais que sur vstack, concaténer etc. Cependant, il semble que ces besoin de deux tableaux numpy comme entrées. Ce dont j'ai besoin est:

big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
    array i of shape = (2,4) created.
    add to big_array

Le big_array doit avoir une forme (10,4). Comment faire cela? Merci pour votre aide.

EDIT: je veux ajouter la précision suivante. Je suis conscient que je peux définir big_array = numpy.zeros((10,4)) et puis la remplir. Cependant, cela nécessite de spécifier la taille de big_array à l'avance. Je sais que la taille dans ce cas, mais que si je le fais pas? Lorsque nous utilisons le .ajout de la fonction pour l'extension de la liste en python, nous n'avons pas besoin de connaître sa taille définitive à l'avance. Je me demande si quelque chose de similaire existe pour la création d'un ensemble de petits tableaux, à commencer par un tableau vide. Merci!

201voto

katrielalex Points 40655

numpy.zeros

De retour d'un nouveau tableau de la forme et de la type, rempli avec des zéros.

ou

numpy.ones

De retour d'un nouveau tableau de la forme et de la type, rempli avec ceux.

ou

numpy.empty

De retour d'un nouveau tableau de la forme et de la type, sans l'initialisation des entrées.


Cependant, l'état d'esprit dans lequel nous construisons un tableau en ajoutant des éléments à une liste n'est pas beaucoup utilisé dans numpy, parce que c'est moins efficace (numpy types de données sont beaucoup plus proches de la sous-jacentes C des tableaux). Au lieu de cela, vous devriez préallouer le tableau à la taille que vous souhaitez, puis remplissez les lignes. Vous pouvez utiliser numpy.append si vous devez, cependant.

49voto

user508414 Points 140

La façon dont j'ai l'habitude de le faire est par la création d'une liste, puis ajouter mes trucs, et enfin de transformer la liste à un tableau numpy comme suit :

import numpy as np
big_array = [] #  empty regular list
for i in range(5):
    arr = i*np.ones((2,4)) # for instance
    big_array.append(arr)
big_np_array = np.array(big_array)  # transformed to a numpy array

bien sûr, votre objet final prend deux fois plus d'espace dans la mémoire à l'étape de création, mais en ajoutant sur la liste python est très rapide, et la création à l'aide de np.array() aussi.

16voto

Adobe Points 1592

Tableau analogue pour le python:

a = []
for i in range(5):
    a.append(i)

est:

a = empty((0))
for i in range(5):
    a = append(a, i)

7voto

Quant Metropolis Points 158

numpy.fromiter() est ce que vous cherchez:

big_array = numpy.fromiter(xrange(5), dtype="int")

Il travaille également avec le générateur d'expressions, par exemple:

big_array = numpy.fromiter( (i*(i+1)/2 for i in xrange(5)), dtype="int" )

Si vous connaissez la longueur du tableau à l'avance, vous pouvez le spécifier avec une option de 'count' argument.

7voto

tom10 Points 19886

Pour votre premier tableau, exemple, usage,

a = numpy.arange(5)

Pour initialiser big_array, l'utilisation

big_array = numpy.zeros((10,4))

Cela suppose que vous voulez initialiser avec des zéros, ce qui est assez typique, mais il ya beaucoup d'autres façons d'initialiser un tableau numpy.

Edit: Si vous ne connaissez pas la taille de big_array à l'avance, il est généralement préférable de construire d'abord une liste Python en utilisant append, et quand vous avez tout ce qui est récolté dans la liste, convertir cette liste à un tableau numpy l'aide d' numpy.array(mylist). La raison pour cela est que les listes sont destinés à croître très rapidement et efficacement, alors que numpy.concaténer serait inefficace puisque les tableaux numpy ne change pas de taille facilement. Mais une fois que tout est recueilli dans une liste, et vous connaissez la finale de la taille de la matrice, un tableau numpy peuvent être efficacement construit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X