【发布时间】:2014-04-24 10:30:46
【问题描述】:
我最近开始研究 McKinney 的 Python 数据分析。这让我在书中绊倒了:
数组切片是原始数组的视图。这意味着数据不 复制并且对视图的任何修改都将反映在 源数组...由于 NumPy 是针对大数据用例设计的 记住,如果 NumPy,你可以想象性能和内存问题 坚持从左到右复制数据。
很好。似乎是一个明智的设计选择。但是两页后它说:
通过布尔索引从数组中选择数据总是会创建一个副本 的数据,即使返回的数组没有改变。
等等,什么?还有,
您甚至可以将布尔数组与切片进行混合和匹配...例如
data[names == 'Bob', 2:]
现在会返回什么?数据副本的视图?为什么这种行为是这样的?来自 R,我看到布尔索引和基于位置的索引同样常用的技术。如果 NumPy 的设计目的是避免复制内存,那么是什么驱动了这种设计选择?
谢谢。
【问题讨论】: