从Numpy数组中删除列的有效方法?

Kri*_*pta 6 python arrays numpy slice

如果我有一个非常大的numpy数组和一个无用的列,我怎么能删除它而不创建原始数组的副本?

np.delete(my_np_array, 0, 1)
Run Code Online (Sandbox Code Playgroud)

上面的代码将返回没有第零列的数组副本.但我想简单地删除该列,my_np_array因为我不需要它.对于非常大的数据集,内存管理变得很重要,并且复制可能不是一种选择.

mat*_*hat 5

如果内存是主要问题,您可以做的就是在数组中移动列,使不需要的列位于数组的最末尾,然后使用ndarray.resize就地修改数组,以缩小数组并丢弃外层柱。

您不能简单地使用提供的 API 就地删除数组的第一列,我怀疑这是因为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
Run Code Online (Sandbox Code Playgroud)