【发布时间】:2021-11-16 03:05:38
【问题描述】:
我有一个包含数十亿行和几百列的大型 2D numpy 数组,我想使用 x[:, [0, 1, 3, 5, 11, ...]] 选择大约 100 列我认为它只会创建原始 numpy 数组的视图,但实际上它正在沿流程创建数据副本并炸毁机器内存。为什么除了原始数据还需要消耗内存?有没有办法避免这样做?
【问题讨论】:
-
A
view是一个新数组,它使用原始的data-buffer(源数组的一维版本)和它自己的shape和strides。basic indexing可以实现所有维度的切片。但是你有一个列的列表。它不能选择带有切片的不规则列模式。 -
谢谢!这是否意味着如果我不使用列索引列表,而是使用范围,例如 x[:, 10:100],那么这里应该没有额外的内存消耗?
-
我只是试了一下,看来我可以在不创建额外副本的情况下执行 [x:, 10:100] 和 [x:, 10:100:3] 之类的操作,因为因为它可以使用形状和步幅从原始数据中推断元素的位置,但是如果我执行 x[:, [1, 2, 3, 4, 5]],它将创建数据的副本
标签: python numpy numpy-ndarray