如果我有一个非常大的 numpy 数组,其中有一个无用的列,我如何删除它而不创建原始数组的副本?
np.delete(my_np_array, 0, 1)
上面的代码将返回一个没有第零列的数组副本。但我只想从 my_np_array
中删除该列,因为我不需要它。对于非常大的数据集,内存管理变得很重要,复制可能不是一种选择。
最佳答案
如果内存是主要问题,您可以在数组中移动列,使不需要的列位于数组的末尾,然后使用 ndarray.resize ,它会就地修改数组,将其缩小并丢弃外部列。
您不能简单地使用提供的 API 就地删除数组的第一列,我怀疑这是因为 memory layout of an ndarray将多维索引映射到连续内存块内的单维面向字节的寻址。
以下示例将最后一列复制到第一列,然后删除最后一列(现在不需要),立即清除关联的内存。所以它基本上从内存中完全删除过时的列,代价是更改列顺序。
D1, D2 = A.shape
A[:, 0] = A[:, D2-1]
A.resize((D1, D2-1), refcheck=False)
A.shape
# => would be (5, 4) if the shape was initially (5, 5) for example
关于python - 从 Numpy 数组中删除列的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20580775/