numpy中的flatten和ravel函数有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)
import numpy as np
y = np.array(((1,2,3),(4,5,6),(7,8,9)))
OUTPUT:
print(y.flatten())
[1   2   3   4   5   6   7   8   9]
print(y.ravel())
[1   2   3   4   5   6   7   8   9]

这两个函数都返回相同的列表。那么执行相同工作的两种不同功能需要什么。

提问于
用户回答回答于

一个关键的区别是它flatten是一个ndarray对象的方法,因此只能用于真正的numpy数组。相比之下ravel(),一个库级函数,因此可以在任何可以成功解析的对象上调用。例如ravel()将在ndarrays列表上工作,而扁平化对于该类型的对象不可用。

用户回答回答于

目前的API是:

  • flatten 总是返回一份副本。
  • ravel尽可能返回原始数组的视图。这在打印输出中不可见,但是如果修改由ravel返回的数组,它可能会修改原始数组中的条目。如果修改从拼合返回的数组中的条目,这绝不会发生。ravel通常会更快,因为没有内存被复制,但你必须更加小心地修改它返回的数组。
  • reshape((-1,)) 每当数组的步幅允许时都会获得一个视图,即使这意味着你并不总是获得一个连续的数组。

扫码关注云+社区