Qual è la differenza tra quanto segue?numpy difference between flat and ravel()
>>> import numpy as np
>>> arr = np.array([[[ 0, 1, 2],
... [ 10, 12, 13]],
... [[100, 101, 102],
... [110, 112, 113]]])
>>> arr
array([[[ 0, 1, 2],
[ 10, 12, 13]],
[[100, 101, 102],
[110, 112, 113]]])
>>> arr.ravel()
array([ 0, 1, 2, 10, 12, 13, 100, 101, 102, 110, 112, 113])
>>> arr.ravel()[0] = -1
>>> arr
array([[[ -1, 1, 2],
[ 10, 12, 13]],
[[100, 101, 102],
[110, 112, 113]]])
>>> list(arr.flat)
[-1, 1, 2, 10, 12, 13, 100, 101, 102, 110, 112, 113]
>>> arr.flat[0] = 99
>>> arr
array([[[ 99, 1, 2],
[ 10, 12, 13]],
[[100, 101, 102],
[110, 112, 113]]])
A parte il fatto che flat
restituisce un iteratore invece di una lista, sembrano essere la stessa, poiché entrambi alterano la matrice originale in luogo (questo è in contrasto con flatten()
, che restituisce una copia di l'array). Quindi, c'è qualche altra differenza significativa tra flat
e ravel()
? Altrimenti, quando sarebbe utile usarne uno invece dell'altro?
'np.array (arr.flat)' dà qualcosa di più vicino (forse identico) a 'np.ravel (x)'. – hpaulj