为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2019-10-15 09:10:28
import numpy as npy = 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]这两个函数返回相同的列表。那么需要两个不同的功能来执行相同的工作。
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

当前的API是:


flatten 总是返回一个副本。

ravel尽可能返回原始数组的视图。这在打印输出中不可见,但是如果您修改ravel返回的数组,则可能会修改原始数组中的条目。如果您修改从flatten返回的数组中的条目,则将永远不会发生。ravel通常会更快,因为没有内存被复制,但是您在修改它返回的数组时要格外小心。

reshape((-1,)) 每当数组的步幅允许它时,它都会得到一个视图,即使这意味着您并不总是可以获得连续的数组。


查看完整回答
反对 回复 2019-10-15
?
SMILET

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。


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信