gpt4 book ai didi

python - flat 和 ravel() 之间的 numpy 区别

转载 作者:太空狗 更新时间:2023-10-29 17:48:00 27 4
gpt4 key购买 nike

以下有什么区别?

>>> 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 形成对比(),返回数组的副本)。那么,flatravel() 之间是否还有其他显着差异?如果不是,什么时候使用一个而不是另一个有用?

最佳答案

flat 是一个迭代器。它是一个单独的对象,恰好可以通过索引访问数组元素。它的主要目的是用于循环和理解表达式。它给出的顺序与您通常从 ravel 获得的顺序相同。

ravel 的结果不同,flat 不是 ndarray,所以它除了索引数组和遍历数组外不能做太多事情.请注意,您必须调用 list 才能查看迭代器的内容。例如,arr.flat.min() 会因 AttributeError 而失败,而 arr.ravel().min() 会给出与 arr.min() 相同的结果。

由于 numpy 提供了很多不需要显式循环编写的操作,ndarray.flat 和一般的迭代器相比 很少使用ndarray.ravel().

也就是说,有些情况下迭代器更可取。如果您的数组足够大,并且您正试图一个一个地检查所有元素,那么迭代器就可以很好地工作。如果您有类似内存映射数组的部分加载的内容,则尤其如此。

关于python - flat 和 ravel() 之间的 numpy 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357811/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com