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

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]

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


互换的青春
浏览 1155回答 3
3回答

呼如林

当前的API是:flatten 总是返回一个副本。ravel尽可能返回原始数组的视图。这在打印输出中不可见,但是如果您修改ravel返回的数组,则可能会修改原始数组中的条目。如果您修改从flatten返回的数组中的条目,则将永远不会发生。ravel通常会更快,因为没有内存被复制,但是您在修改它返回的数组时要格外小心。reshape((-1,)) 每当数组的步幅允许它时,它都会得到一个视图,即使这意味着您并不总是可以获得连续的数组。

SMILET

这是函数的正确名称空间:numpy.ndarray.flattennumpy.ravel这两个函数均返回指向新存储器结构的展平一维数组。import numpya = numpy.array([[1,2],[3,4]])r = numpy.ravel(a)f = numpy.ndarray.flatten(a)  print(id(a))print(id(r))print(id(f))print(r)print(f)print("\nbase r:", r.base)print("\nbase f:", f.base)---returns---140541099429760140541099471056140541099473216[1 2 3 4][1 2 3 4]base r: [[1 2] [3 4]]base f: None在上面的示例中:结果的存储位置不同,结果看起来一样展平将返回副本ravel将返回一个视图。我们如何检查某物是否是副本?使用的.base属性ndarray。如果是视图,则基础将是原始数组;如果是副本,则基数为None。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python