En utilisant des tableaux Python standard, je peux faire ce qui suit:
arr = []
arr.append([1,2,3])
arr.append([4,5,6])
# arr is now [[1,2,3],[4,5,6]]
Cependant, je ne peux pas faire la même chose avec numpy. Par exemple:
arr = np.array([])
arr = np.append(arr, np.array([1,2,3]))
arr = np.append(arr, np.array([4,5,6]))
# arr is now [1,2,3,4,5,6]
J'ai également examiné vstack
, mais lorsque j'utilise vstack
sur un tableau vide, j'obtiens:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Alors, comment puis-je ajouter une nouvelle ligne à un tableau vide dans numpy?
Réponses:
La façon de «démarrer» le tableau que vous souhaitez est:
Ce qui est un tableau vide mais il a la dimensionnalité appropriée.
Assurez-vous ensuite d'ajouter le long de l'axe 0:
Mais, @jonrsharpe a raison. En fait, si vous allez ajouter dans une boucle, il serait beaucoup plus rapide d'ajouter à une liste comme dans votre premier exemple, puis de convertir en un tableau numpy à la fin, car vous n'utilisez vraiment pas numpy comme prévu pendant la boucle:
La façon numpythonique de le faire dépend de votre application, mais ce serait plutôt comme:
la source
a = a[:N]
Bien que je crois fermement que vous devriez trouver un moyen de le vectoriser (postez une nouvelle question avec vos détails si vous avez besoin d'aide) ou utilisez simplement des listes jusqu'à ce que la boucle soit terminée.Voici ma solution:
la source
Dans ce cas, vous pouvez utiliser les fonctions np.hstack et np.vstack
Vous pouvez également utiliser la fonction np.concatenate.
À votre santé
la source
en utilisant une définition dtype personnalisée, ce qui a fonctionné pour moi était:
la source
En cas d'ajout de nouvelles lignes pour le tableau en boucle, assignez le tableau directement pour la première fois en boucle au lieu d'initialiser un tableau vide.
Ceci est principalement utile lorsque la forme du tableau est inconnue
la source
Je veux faire une boucle for, mais avec la méthode askewchan cela ne fonctionne pas bien, donc je l'ai modifié.
la source