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



我试图通过索引删除数组中的观察值。我有的是:

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

我想做的是返回一个与test相同的数组,但已经删除了第5个观察值(即test[0:4 AND 6:])。有什么简单的方法吗?

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

Numpy有delete,参见http://docs.scipy.org/doc/numpy/reference/generated/numpy.delete.html

在您的情况下,numpy.delete(test, 5, axis=1)应该做它。BUT:元素不被原位删除,函数返回一个不包含第五列的新数组。

另一种选择是使用掩码数组,这取决于你的应用程序,可以提高速度,因为你不必删除条目和/或创建新的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()。然而,这将执行分配新内存和向其复制数据的昂贵工作。

遮罩数组可能对这个特定的问题没有好处,但是知道它们的存在是很好的。

最新更新