以下几点有什么区别?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