web-dev-qa-db-fra.com

Pourquoi la forme d'un tableau 1D ne montre-t-elle pas le nombre de lignes comme 1?

Je sais que numpy array a une méthode appelée shape qui retourne [Nombre de lignes, Nombre de colonnes], et shape [0] vous donne le nombre de lignes, shape [1] vous donne le nombre de colonnes.

a = numpy.array([[1,2,3,4], [2,3,4,5]])
a.shape
>> [2,4]
a.shape[0]
>> 2
a.shape[1]
>> 4

Cependant, si mon tableau n'a qu'une ligne, il renvoie [Nombre de colonnes,]. Et la forme [1] sera hors de l'index. Par exemple

a = numpy.array([1,2,3,4])
a.shape
>> [4,]
a.shape[0]
>> 4    //this is the number of column
a.shape[1]
>> Error out of index

Maintenant, comment puis-je obtenir le nombre de lignes d'un tableau numpy si le tableau peut avoir une seule ligne?

Je vous remercie

30
Yichuan Wang

Le concept de rangées et colonnes s'applique lorsque vous avez un tableau 2D. Cependant, le tableau numpy.array([1,2,3,4]) est un tableau 1D et n'a donc qu'une seule dimension. Par conséquent, shape renvoie à juste titre une seule valeur itérable.

Pour une version 2D du même tableau, tenez compte de ce qui suit:

>>> a = numpy.array([[1,2,3,4]]) # notice the extra square braces
>>> a.shape
(1, 4)
38
Moses Koledoye

Plutôt que de convertir cela en un tableau 2d, ce qui peut ne pas être une option à chaque fois - vous pouvez soit vérifier la len() du tuple renvoyé par la forme, soit simplement rechercher une erreur d'index en tant que telle:

import numpy

a = numpy.array([1,2,3,4])
print(a.shape)
# (4,)
print(a.shape[0])
try:
    print(a.shape[1])
except IndexError:
    print("only 1 column")

Ou vous pouvez simplement essayer d’attribuer cette variable à une variable pour une utilisation ultérieure (ou renvoyer ce que vous avez) si vous savez que vous n’avez que 1 ou 2 formes de dimension:

try:
    shape = (a.shape[0], a.shape[1])
except IndexError:
    shape = (1, a.shape[0])

print(shape)
3
JGreenwell