我正在尝试通过索引删除数组中的观察。我所拥有的是:
import numpy as np
test = np.ones([1, 1001])
我想要做的是返回一个与test相同的数组,但是删除了第5个观察结果(即test [0:4 AND 6:])。有一种简单的方法可以做到这一点吗?
答案 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()
。但是,这将执行分配新内存并将数据复制到其中的昂贵工作。
屏蔽数组可能不会对此特定问题有所帮助,但最好知道它们存在。