通过Python中的索引删除数组列

时间:2011-09-21 08:05:09

标签: python arrays indexing numpy

我正在尝试通过索引删除数组中的观察。我所拥有的是:

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

我想要做的是返回一个与test相同的数组,但是删除了第5个观察结果(即test [0:4 AND 6:])。有一种简单的方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:2)

您可以使用切片和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:]会删除两个元素而不是一个。

答案 1 :(得分:2)

Numpy已delete,请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.delete.html

在您的情况下numpy.delete(test, 5, axis=1)应该这样做。 但是:元素没有被删除,该函数返回一个没有第5列的新数组。

答案 2 :(得分:1)

另一种方法是使用masked arrays,根据您的应用程序,可以提高速度,因为您不必删除条目和/或创建新的ndarrays,这些是AFAIK,非常昂贵的操作在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()。但是,这将执行分配新内存并将数据复制到其中的昂贵工作。

屏蔽数组可能不会对此特定问题有所帮助,但最好知道它们存在。