3 回答
TA贡献1798条经验 获得超3个赞
当前的API是:
flatten 总是返回一个副本。
ravel尽可能返回原始数组的视图。这在打印输出中不可见,但是如果您修改ravel返回的数组,则可能会修改原始数组中的条目。如果您修改从flatten返回的数组中的条目,则将永远不会发生。ravel通常会更快,因为没有内存被复制,但是您在修改它返回的数组时要格外小心。
reshape((-1,)) 每当数组的步幅允许它时,它都会得到一个视图,即使这意味着您并不总是可以获得连续的数组。
TA贡献1796条经验 获得超4个赞
这是函数的正确名称空间:
numpy.ndarray.flatten
numpy.ravel
这两个函数均返回指向新存储器结构的展平一维数组。
import numpy
a = 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---
140541099429760
140541099471056
140541099473216
[1 2 3 4]
[1 2 3 4]
base r: [[1 2]
[3 4]]
base f: None
在上面的示例中:
结果的存储位置不同,
结果看起来一样
展平将返回副本
ravel将返回一个视图。
我们如何检查某物是否是副本?使用的.base属性ndarray。如果是视图,则基础将是原始数组;如果是副本,则基数为None。
添加回答
举报