w Matlab, można wykonać następujące czynności:Łatwy sposób na zwinięcie końcowych wymiarów tablicy numpy?
X = randn(25,25,25);
size(X(:,:))
ans =
25 625
I często znajduję się chcąc szybko zwijać końcowe wymiary tablicy, i nie wiem, jak to zrobić w numpy.
wiem, że mogę to zrobić:
In [22]: x = np.random.randn(25,25,25)
In [23]: x = x.reshape(x.shape[:-2] + (-1,))
In [24]: x.shape
Out[24]: (25, 625)
ale x.reshape(x.shape[:-2] + (-1,))
jest dużo mniej zwięzły (i wymaga więcej informacji o x
) niż po prostu robi x(:,:)
.
Mam oczywiście próbowaliśmy analogiczną numpy indeksowanie, ale to nie działa zgodnie z oczekiwaniami:
In [25]: x = np.random.randn(25,25,25)
In [26]: x[:,:].shape
Out[26]: (25, 25, 25)
żadnych wskazówek, w jaki sposób zwijać końcowe wymiary tablicy w zwięzły sposób?
Edycja: zauważ, że szukam wynikowej tablicy, a nie tylko jej kształtu. Używam tylko size()
i x.shape
w powyższych przykładach, aby wskazać, jaka jest tablica.
Na marginesie Twój przykład jest niepoprawny ... 'x.shape [: - 2]' dałoby pustą krotkę. (Dodanie do niego '-1' oznacza, że tablica zostanie" spłaszczona "w tablicy o długości 15625). Domyślam się, że chodziło o' x.shape [0] '? –
@JoeKington: It * is * correct (try it). 'x.shape [: - 2]' zwraca 'x.shape' do (ale nie włączając) elementu od drugiego do ostatniego. Tak więc dla tablicy 3D 'x' zwraca tylko pierwszy element' x.shape'. Użyłem '[: -2]' zamiast '[0]', ponieważ szukam ogólnego rozwiązania, które działa dla wszystkich macierzy ND, gdzie N> 2. – EelkeSpaak
@ElkeSpaak - Racja. Nie myślałem jasno. –