在numpy中展平和拉威尔的区别是什么?

在numpy中展平和拉威尔的区别是什么?,numpy,Numpy,Numpy v 1.9包含两个看似相同的函数: 和 有什么区别?我什么时候可以选择一个或另一个来将二维np.array转换为一维?Aha: 主要的功能区别在于,flatte是一种ndarray对象的方法,因此只能为真正的numpy数组调用。相反,ravel()是一个库级函数,因此可以对任何可以成功解析的对象调用。例如,ravel()将在Ndarray列表上工作,而展平(显然)不会 此外,正如@jonrsharpe在他的评论中指出的那样,展平方法总是返回一份副本,而ravel只在“需要时”才这样

Numpy v 1.9包含两个看似相同的函数: 和

有什么区别?我什么时候可以选择一个或另一个来将二维np.array转换为一维?

Aha: 主要的功能区别在于,
flatte
是一种ndarray对象的方法,因此只能为真正的numpy数组调用。相反,
ravel()
是一个库级函数,因此可以对任何可以成功解析的对象调用。例如,
ravel()
将在Ndarray列表上工作,而展平(显然)不会


此外,正如@jonrsharpe在他的评论中指出的那样,展平方法总是返回一份副本,而ravel只在“需要时”才这样做。仍然不太确定这一决定是如何做出的。

如果你阅读链接的文档,请注意,
展平
将始终“返回一份副本”,而
ravel
将创建一份副本“只有在需要的时候“。我在文件中读到过,但什么是只有在需要时才读?什么情况下不需要它?NP如何知道是否需要它?在进一步的测试中,似乎还有一些情况下展平对阵列不起作用,但ravel会起作用。还是不知道为什么。这就是我希望通过这个问题获得的信息类型。那么,也许这就是你应该问的……谢谢你提供的有用链接,但它肯定不能回答我更一般的问题:这两个函数之间有什么区别,为什么选择一个而不是另一个。看看下面我的答案。它可能是基本的,但关键的区别在于一个是方法,另一个是函数。在另一个问题中,这一区别肯定没有得到解决,这在很大程度上解释了为什么有两个“功能”。这些区别和其他可能的区别也使我的问题不再重复,因此我恳请您删除这一误导性标志。@BryanP:因此流行是一件事:')即使您通过多维索引访问数组,在内存中元素仍然是按线性顺序寻址的(使用简单的光栅扫描模式将多索引转换为线性索引)。如果您要求元素的顺序与它们已存储在内存中的顺序相同,我希望numpy返回“视图”(并且仅当您请求的维度排序需要重新排列内存中的元素序列时才返回副本)。