从数组中删除元素

14

我有一个numpy数组,想要删除该数组的前3个元素。我尝试了以下解决方案:

           a = np.arange(0,10)
           i=0
           while(i<3):
             del a[0]
             i=i+1

这给了我一个错误,错误信息为 "ValueError: 无法删除数组元素"。我不明白为什么会出现这种情况。感谢帮助!

4个回答

22

Numpy数组具有固定的大小,因此您不能简单地从中删除一个元素。实现您想要的最简单的方法是使用切片:

a = a[3:]

这将创建一个新的数组,从原始数组的第四个元素开始。

对于某些情况,切片不足以满足需求。如果想要创建由原始数组中特定元素组成的子数组,则可以使用另一个数组来选择索引:

>>> a = arange(10, 20)
>>> a[[1, 4, 5]]
array([11, 14, 15])

基本上,a[[1,4,5]]将会返回一个数组,其由原始数组中的元素1、4和5组成。


@Neil:你说得对。那实际上是我第一个版本,但是然后出于某种扭曲的原因,我把它改成了4。 - Björn Pollex
1
正确的说法是:基本切片不会创建新的数组,而是创建一个对底层数据的新视图,请参见http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html,这也是为什么在许多情况下numpy可以像C代码一样快的原因之一。 - rocksportrocker
1
@rock:正确!我把它和普通的Python混淆了,后者确实会创建一个新数组。 - Björn Pollex
如果你想用视图替换底层数据,请使用copy包中的deepcopy函数,执行a = deepcopy(a[3:]) - v4gil

15

对我来说有效:

import numpy as np
a = np.delete(a, k)

其中,“a”是您的NumPy数组,k是您要删除的索引位置。

希望能有所帮助。


1

NumPy数组不支持元素删除。为什么不使用切片来实现你想要的效果呢?

a = a[3:]

-1
你可以将其转换为列表,然后尝试使用pop、del等常规删除命令。
a = np.array([1,2,3,4,5])
l = list(a)
l.pop(3)
l
>>[1, 2, 3, 5]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接