2016-09-21 24 views
14

Wiem, że tablica numpy ma metodę o nazwie shape, która zwraca [Liczba wierszy, Nr kolumn], a kształt [0] podaje liczbę wierszy, kształt [1] daje ty liczbę kolumn.Liczba wierszy w tablicy numpy

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

Jednak jeśli moja tablica ma tylko jeden wiersz, to zwraca [No.of columns]. Kształt [1] będzie poza indeksem. Na przykład:

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 

Teraz, jak uzyskać liczbę wierszy tablicy numpy, jeśli tablica może mieć tylko jeden wiersz?

Dziękuję

Odpowiedz

25

Koncepcja wierszy i kolumn stosuje się, gdy masz tablicę 2D. Jednak tablica numpy.array([1,2,3,4]) jest tablicą 1D i dlatego ma tylko jeden wymiar, dlatego też poprawnie zwraca jednoznaczną wartość iterowalną.

Dla wersji 2D tej samej tablicy, należy rozważyć następujące zamiast:

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

Uratuj mi życie! Bardzo dziękuję –

+0

@YichuanWang A jeśli zaczniesz od tablicy 1-d ('a_1d = numpy.array ([1,2,3,4])'), zawsze możesz przekształcić ją w tablicę 2-wymiarową z np. 'a_2d = a_1d [None,:]' – donkopotamus

2

Raczej następnie przekształcenie to 2d tablicy, która nie może być opcja, za każdym razem - można też sprawdzić len() z krotka zwrócony przez kształt lub po prostu sprawdzić błędu indeksu jako takie:

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") 

albo może po prostu spróbować przypisać to do zmiennej do późniejszego wykorzystania (lub powrotu lub co ty), jeśli wiesz, że tylko będzie mają 1 lub 2 kształty wymiarowe:

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

print(shape) 
+0

Dziękuję. odkąd jestem nowy w Pythonie, nawet nie myślałem o używaniu tego sposobu "spróbuj z wyjątkiem". Twoja odpowiedź otwiera oczy! –