通过索引在Python中移除数组的列
我想通过索引来从一个数组中删除一个元素。我现在有的是:
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:]
会删除两个元素,而不是一个。