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

标签 python arrays numpy slice

如果我有一个非常大的 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/

相关文章:

java - 更改数组中的值

python - 逐元素添加一维和二维 numpy 数组

python - 将 Numpy 数组中的一个 channel 广播为三个 channel

python - 请求中的数据和参数有什么区别?

Python OpenCV 颜色跟踪

C编程: Pointer to a row of a 2D array?

php - 检查空数组 : count vs empty

python - 将整数乘以 bool 值并理解 numpy 数组比较

python - 一次将名称以字符串 `abc_` 开头的多个 bool 列转换为整数 dtype

Python Regex 替换 - 是否可以进行有条件的替换?