qual è la differenza tra resize e reshape [duplicate]
Stavo scrivendo una riga di codice e ne ottengo uno strano output.
a = np.arange(2,11).resize((3,3))
print(a)
a = np.arange(2,11).reshape((3,3))
print(a)
il primo mi dà Nessuno ma il secondo mi dà una matrice 3X3. ma quando scrivo il primo codice in righe separate non mi darà Nessuno
a = np.arange(2,11)
a.resize((3,3))
print(a)
qual è la differenza tra resize e reshape in questo caso e in quali sono le differenze in generale?
Risposte
Questo perché ndarray.resizemodifica la forma dell'array sul posto e poiché stai assegnando di nuovo a ate None, come un'operazione sul posto non restituisce nulla. reshaperestituisce invece una vista dell'array:
a = np.arange(2,11)
a.shape
#(10,)
a.resize((3,3))
a.shape
# (3, 3)
np.arange(2,11).reshape((3,3)).shape
# (3, 3)
Sia il rimodellamento che il ridimensionamento cambiano la forma dell'array numpy; la differenza è che l'uso del ridimensionamento influirà sull'array originale mentre l'uso di reshape creerà una nuova istanza rimodellato dell'array.
Rimodellare:
import numpy as np
r = np.arange(16)
print('original r: \n',r)
print('\nreshaped array: \n',r.reshape((4,4)))
print('\narray r after reshape was applied: \n',r)
produzione
original r:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
reshaped array:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
array r after reshape was applied:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
Ridimensiona:
import numpy as np
r = np.arange(16)
print('original r: \n',r)
print('\nresized array: \n',r.resize((4,4)))
print('\narray r after resize was applied: \n',r)
produzione:
original r:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
resized array:
None
array r after resize was applied:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
Come puoi vedere reshape ha creato una nuova istanza rimodellata dei dati mentre l'originale r è rimasto invariato e come puoi vedere, resize non ha creato una nuova istanza di r, le modifiche sono state applicate direttamente all'array originale.