Je ne peux pas comprendre comment utiliser un tableau ou une matrice de la manière que j'utiliserais normalement une liste. Je veux créer un tableau (ou matrice) vide, puis y ajouter une colonne (ou ligne) à la fois.
Pour le moment, la seule façon de le faire est comme:
mat = None
for col in columns:
if mat is None:
mat = col
else:
mat = hstack((mat, col))
Alors que si c'était une liste, je ferais quelque chose comme ça:
list = []
for item in data:
list.append(item)
Existe-t-il un moyen d'utiliser ce type de notation pour les tableaux ou matrices NumPy ?
.empty()
signifie donc que l'on peut trouver des valeurs aléatoires dans les cellules, mais le tableau est créé plus rapidement que par exemple avec.zeros()
?Un tableau NumPy est une structure de données très différente d'une liste et est conçu pour être utilisé de différentes manières. Votre utilisation de
hstack
est potentiellement très inefficace ... chaque fois que vous l'appelez, toutes les données du tableau existant sont copiées dans un nouveau. (Laappend
fonction aura le même problème.) Si vous souhaitez créer votre matrice une colonne à la fois, il est préférable de la conserver dans une liste jusqu'à ce qu'elle soit terminée, puis de la convertir en tableau.par exemple
item
peut être une liste, un tableau ou tout autre itérable, tant que chacunitem
a le même nombre d'éléments.Dans ce cas particulier (
data
est-il un certain nombre d'itérations pouvant contenir les colonnes de la matrice), vous pouvez simplement utiliser(Notez également que l'utilisation en
list
tant que nom de variable n'est probablement pas une bonne pratique car elle masque le type intégré par ce nom, ce qui peut entraîner des bogues.)ÉDITER:
Si, pour une raison quelconque, vous voulez vraiment créer un tableau vide, vous pouvez simplement l'utiliser
numpy.array([])
, mais cela est rarement utile!la source
np.concatenate()
), vous pouvez utiliser:np.empty((0, some_width))
. 0, donc votre premier tableau ne sera pas une ordure.Pour créer un tableau multidimensionnel vide dans NumPy (par exemple un tableau 2D
m*n
pour stocker votre matrice), au cas où vous ne savez pasm
combien de lignes vous ajouterez et ne vous souciez pas du coût de calcul mentionné par Stephen Simmons (à savoir la reconstruction du tableau à chaque append), vous pouvez presser à 0 la dimension à laquelle vous voulez ajouter à:X = np.empty(shape=[0, n])
.De cette façon, vous pouvez utiliser par exemple (ici
m = 5
que nous supposons que nous ne savions pas lors de la création de la matrice vide, etn = 2
):ce qui vous donnera:
la source
J'ai beaucoup réfléchi à cela parce que je devais utiliser un numpy.array comme un ensemble dans l'un de mes projets scolaires et je devais être initialisé vide ... Je n'ai trouvé aucune réponse pertinente ici sur Stack Overflow, alors j'ai commencé griffonner quelque chose.
Le résultat sera:
Par conséquent, vous pouvez initialiser directement un tableau np comme suit:
J'espère que ça aide.
la source
a=np.array([])
semble être par défautfloat64
Vous pouvez utiliser la fonction d'ajout. Pour les lignes:
Pour les colonnes:
EDIT
Bien sûr, comme mentionné dans d'autres réponses, à moins que vous ne fassiez un traitement (ex. Inversion) sur la matrice / le tableau CHAQUE fois que vous y ajoutez quelque chose, je créerais simplement une liste, y ajouterais puis la convertirais en un tableau.
la source
Si vous ne connaissez absolument pas la taille finale du tableau, vous pouvez incrémenter la taille du tableau comme ceci:
0
dans la première ligne.numpy.append
est une autre option. Ça appellenumpy.concatenate
.la source
Vous pouvez l'appliquer pour construire n'importe quel type de tableau, comme des zéros:
la source
a= [0] * 5
c'est la solution simpleVoici quelques solutions pour faire ressembler numpys à des listes
SORTIE: tableau ([2., 24.])
la source
Selon l'utilisation que vous en faites, vous devrez peut-être spécifier le type de données (voir «dtype» ).
Par exemple, pour créer un tableau 2D de valeurs 8 bits (pouvant être utilisé comme image monochrome):
Pour une image RVB, incluez le nombre de canaux de couleur dans la forme:
shape=(H,W,3)
Vous pouvez également envisager d'initialiser zéro avec
numpy.zeros
au lieu d'utilisernumpy.empty
. Voir la note ici .la source
Je pense que vous voulez gérer la plupart du travail avec des listes, puis utiliser le résultat comme matrice. C'est peut-être une façon;
la source
Je pense que vous pouvez créer un tableau numpy vide comme:
Ce format est utile lorsque vous souhaitez ajouter un tableau numpy dans la boucle.
la source
Pour créer un tableau NumPy vide sans définir sa forme, il y a moyen:
1.
préféré. parce que vous savez que vous allez l'utiliser comme numpy.
2.
NumPy le convertit ensuite en type np.ndarray, sans supplément
[]
dimionsion
.la source
Peut-être que ce que vous recherchez est quelque chose comme ceci:
De cette façon, vous pouvez créer un tableau sans aucun élément. C'est similaire à:
De cette façon, vous pourrez ajouter à l'avance de nouveaux éléments à votre tableau.
la source