qual é a diferença entre resize e reshape [duplicate]
Eu estava escrevendo uma linha de código e recebo uma saída estranha dela.
a = np.arange(2,11).resize((3,3))
print(a)
a = np.arange(2,11).reshape((3,3))
print(a)
o primeiro me dá Nenhum, mas o segundo me dá uma matriz 3X3. mas quando escrevo o primeiro código em linhas separadas, não me dá nenhum
a = np.arange(2,11)
a.resize((3,3))
print(a)
qual é a diferença entre resize e reshape neste caso e em quais são as diferenças em geral?
Respostas
Isso ocorre porque ndarray.resizemodifica a forma da matriz no local e, como você está atribuindo de volta , aobtém None, já que uma operação local não retorna nada. reshapeem vez disso, retorna uma visualização da matriz:
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)
Tanto a remodelação quanto o redimensionamento alteram a forma da matriz numpy; a diferença é que o uso de resize afetará a matriz original, enquanto o uso de reshape cria uma nova instância remodelada da matriz.
Remodelar:
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)
resultado
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]
Redimensionar:
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)
resultado:
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]]
Como você pode ver, reshape criou uma nova instância remodelada dos dados enquanto o r original permaneceu inalterado. E, como você pode ver, resize não criou uma nova instância de r, as alterações foram aplicadas diretamente ao array original.