以下两者有何不同之处?
>>> 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