通过索引在Python中移除数组的列

3 投票
3 回答
3216 浏览
提问于 2025-04-17 02:44

我想通过索引来从一个数组中删除一个元素。我现在有的是:

import numpy as np
test = np.ones([1, 1001])

我想要的结果是返回一个和test数组一样的数组,但去掉第5个元素(也就是test[0:4 和 6:])。有没有简单的方法可以做到这一点?

3 个回答

1

另一种选择是使用掩码数组。根据你的应用场景,这种方法可以提高速度,因为你不需要删除数据项或者创建新的ndarrays,而这些操作在numpy中通常是比较耗费资源的。

举个例子:

import numpy as np

test = np.ones([1, 1001])
mask = np.zeros((1, 1001))
mask[:,4] = 1
result = np.ma.masked_array(test, mask)

现在第五个元素被掩盖了,你可以对result进行各种操作,比如使用sum()mean()这些方法。更多信息可以查看我给你的链接。如果你想要一个真正的ndarray,只需调用result.compressed()。不过,这样会进行比较耗费资源的操作,分配新的内存并把数据复制过去。

虽然掩码数组可能对这个特定问题没有帮助,但知道它们的存在还是很有用的。

3

Numpy有一个叫做delete的功能,具体可以查看这个链接:http://docs.scipy.org/doc/numpy/reference/generated/numpy.delete.html

在你的情况下,使用numpy.delete(test, 5, axis=1)就可以了。但是要注意:这个操作并不会直接在原来的数组上删除,而是会返回一个新的数组,这个新数组里没有第5列。

4

你可以使用切片和hstack来实现这个功能:

In [18]: test_ex5 = np.hstack((test[:,:5],test[:,6:]))

In [19]: test.shape
Out[19]: (1, 1001)

In [20]: test_ex5.shape
Out[20]: (1, 1000)

注意你的索引有点问题:test[0:4 AND 6:]会删除两个元素,而不是一个。

撰写回答