In Matlab, posso effettuare le seguenti operazioni:Un modo semplice per comprimere le dimensioni finali di array numpy?
X = randn(25,25,25);
size(X(:,:))
ans =
25 625
Spesso mi trovo a voler crollare rapidamente le dimensioni finali di una matrice, e non so come fare questo in NumPy.
So che posso fare questo:
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)
ma x.reshape(x.shape[:-2] + (-1,))
è un molto meno conciso (e richiede ulteriori informazioni su x
) che semplicemente facendo x(:,:)
.
Sono ovviamente provato l'indicizzazione NumPy analoga, ma che non funziona come desiderato:
In [25]: x = np.random.randn(25,25,25)
In [26]: x[:,:].shape
Out[26]: (25, 25, 25)
Eventuali suggerimenti su come comprimere le dimensioni finali di un array in maniera concisa?
Modifica: si noti che sto cercando la matrice risultante, non solo la sua forma. Io uso semplicemente size()
e x.shape
negli esempi precedenti per indicare come è la matrice.
Su una nota a margine, l'esempio non è corretto ... 'x.shape [: - 2]' restituirebbe una tupla vuota. (Aggiungendo '-1' a questo significa che la matrice verrebbe" appiattita "in una matrice di 15625 lunghezze.) Immagino che tu intenda" x.shape [0] '? –
@JoeKington: È * corretto * (provalo). 'x.shape [: - 2]' restituisce 'x.shape' fino a (ma non incluso) il penultimo elemento. Quindi per un array 3D 'x', restituisce solo il primo elemento di' x.shape'. Ho usato '[: -2]' piuttosto che '[0]' perché sto cercando una soluzione generale che funzioni per tutti gli array ND in cui N> 2. – EelkeSpaak
@ElkeSpaak - Giusto. Non stavo pensando chiaramente. –