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

你什么时候会使用`flatten()`而不是`reshape(-1)`?

你什么时候会使用`flatten()`而不是`reshape(-1)`?

拉风的咖菲猫 2022-05-24 12:41:15
通常,当 numpy 具有看似重复的功能时,通常最终会导致其中一个或另一个具有某种独特的目的。我试图弄清楚是否有任何情况 flatten()应该使用而不是reshape(-1)
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

flatten 返回数组的副本。reshape如果可能,将返回视图。因此,例如,如果y = x.reshape(-1)是一个视图,那么修改y也会修改x:


In [149]: x = np.arange(3)


In [150]: y = x.reshape(-1)


In [151]: y[0] = 99


In [152]: x

Out[152]: array([99,  1,  2])

但既然y = x.flatten()是副本,修改y永远不会修改x:


In [153]: x = np.arange(3)


In [154]: y = x.flatten()


In [155]: y[0] = 99


In [156]: x

Out[156]: array([0, 1, 2])

以下是何时reshape返回副本而不是视图的示例:


In [161]: x = np.arange(24).reshape(4,6)[::2, :]


In [163]: y = x.reshape(-1)


In [164]: y[0] = 99


In [165]: x

Out[165]: 

array([[ 0,  1,  2,  3,  4,  5],

       [12, 13, 14, 15, 16, 17]])

由于x不受对 分配的影响y,我们知道y是 的副本 x,而不是视图。


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

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