我试图通过索引删除数组中的观察值。我有的是:
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()
。然而,这将执行分配新内存和向其复制数据的昂贵工作。
遮罩数组可能对这个特定的问题没有好处,但是知道它们的存在是很好的。