以下幾點有什麼區別?flat和ravel之間的numpy差異()
>>> 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]]])
除了一個事實,即flat
返回一個迭代器而不是列表,它們似乎是相同的,因爲他們都改變代替原來陣列(這是對比flatten()
,它返回的副本該陣列)。那麼,flat
和ravel()
之間是否還有其他重要的區別?如果不是,那麼使用一個而不是另一個會有什麼用處?
'np.array(arr.flat)'給出了更接近np.ravel(x)'的東西(可能是相同的)。 – hpaulj