2010-11-01 8 views
12

Dokument numpy.ndarray.T mówiJaka jest różnica numpy.ndarray.T i numpy.ndarray.transpose(), gdy self.ndim <2

ndarray.T - Tak samo jak self.transpose(), z tym że jaźń jest zwracany, jeśli self.ndim < 2.

również ndarray.transpose (* osie) mówi

Dla tablicy 1-D, to nie ma znaczenia.

Czy to nie oznacza tej samej rzeczy?

Oto mały fragment demo:

>>> import numpy as np 
>>> print np.__version__ 
1.5.1rc1 
>>> a = np.arange(7) 
>>> print a, a.T, a.transpose() 
[0 1 2 3 4 5 6] [0 1 2 3 4 5 6] [0 1 2 3 4 5 6] 
+2

Nie ma skutecznej różnicy (oba zwracają widoki do oryginalnej tablicy). W rzeczywistości dokumentacja (?) Jest błędna w kwestii 'ndarray.T' ...' self' nie wydaje się być zwrócone. Innymi słowy, 'x nie jest x.T', nawet jeśli jest to tablica 1D. (Zawartość jest identyczna, ale za każdym razem zwraca nowy obiekt z widokiem na tę samą zawartość). –

+0

@Joe Kington, dzięki za informacje. – lotrpy

Odpowiedz

13

niezależnie od rangi, atrybut .T i metoda .transpose() są takie same-oboje wrócić transpozycję macierzy.

W przypadku macierzy rangi 1, .T i .transpose() nic nie robią - zwracają tablicę.

+0

Zgadnij, co to znaczy, że '.T' i' transpose() '_call_ zarówno zwracają transpozycję tablicy. W rzeczywistości '.T' zwraca transpozycję macierzy, podczas gdy' transpose' jest _więcej general_ method_, która może być podana w osiach ('transpose (* axes)', z wartościami domyślnymi, które sprawiają, że wywołanie 'transpose()' jest równoważne '.T'). – EOL

5

Wygląda na to, że .T jest po prostu wygodną notacją, a funkcja .transpose(*axes) jest bardziej ogólną funkcją i ma zapewniać większą elastyczność, ponieważ można określić osie. Najwyraźniej nie są one zaimplementowane w Pythonie, więc aby to sprawdzić, trzeba zajrzeć do kodu C.

Powiązane problemy