2014-12-19 13 views
16

co stanowi różnicę pomiędzy 2 pola, których kształty są-Różnica tych kształtów tablicy w numpy

(442,1) i (442)?

drukowanie zarówno z nich wywołuje identyczną moc, ale kiedy sprawdzić równość ==, mam 2D ​​wektor jak to-

array([[ True, False, False, ..., False, False, False], 
     [False, True, False, ..., False, False, False], 
     [False, False, True, ..., False, False, False], 
     ..., 
     [False, False, False, ..., True, False, False], 
     [False, False, False, ..., False, True, False], 
     [False, False, False, ..., False, False, True]], dtype=bool) 

Czy ktoś może wyjaśnić różnicę?

Odpowiedz

28

Tablica o kształcie (442, 1) jest dwuwymiarowa. Ma 442 wiersze i 1 kolumnę.

Tablica o kształcie (442,) jest jednowymiarowa i składa się z 442 elementów.

Należy pamiętać, że ich powtórzenia powinny wyglądać inaczej. Jest różnica w liczbie i rozmieszczenie nawiasie:

In [7]: np.array([1,2,3]).shape 
Out[7]: (3,) 

In [8]: np.array([[1],[2],[3]]).shape 
Out[8]: (3, 1) 

Zauważ, że można użyć np.squeeze usunąć osie długości 1:

In [13]: np.squeeze(np.array([[1],[2],[3]])).shape 
Out[13]: (3,) 

NumPy broadcasting rules umożliwiają nowe osie do być automatycznie dodawany po lewej stronie w razie potrzeby. Tak więc (442,) może nadawać do (1, 442). Osie o długości 1 mogą nadawać na dowolną długość. Tak więc podczas testowania równości między tablicą kształtu (442, 1) a tablicą o kształcie (442,), druga macierz zostaje wypromowana do kształtu (1, 442), a następnie te dwie macierze rozszerzają swoje osie o długości 1 tak, że obie stają się nadawanymi macierzami o kształcie (442, 442). To dlatego testując równość, uzyskano boolowską tablicę o kształcie (442, 442).

In [15]: np.array([1,2,3]) == np.array([[1],[2],[3]]) 
Out[15]: 
array([[ True, False, False], 
     [False, True, False], 
     [False, False, True]], dtype=bool) 

In [16]: np.array([1,2,3]) == np.squeeze(np.array([[1],[2],[3]])) 
Out[16]: array([ True, True, True], dtype=bool) 
+0

Dzięki. Jestem nowy w eksploracji danych i nie mogłem zrozumieć składni ([value]) w przeciwieństwie do zwykłej składni ([value]) dla kształtów tablicy. Ten dodatkowy przecinek sprawiał, że sprawy były zawiłe. – goelakash

+10

Przecinek w '(422,)' wskazuje, że wyrażenie jest krotką. To krotka z jednym elementem w środku. Bez przecinka, '(422)' zostanie ocenione jako liczba całkowita '422'. Kształt tablicy jest zawsze krotką. – unutbu

+2

Czy tablice wielkości (1,442) i (442,) są takie same? – bikashg