Mhm*_*nsr 17 python numpy list
是否可以在不知道对象索引的情况下从numpy数组中删除对象,而是知道对象本身?
我已经看到可以使用np.delete函数使用对象的索引,但我正在寻找一种方法来实现它具有对象但不是它的索引
例:
[A,B,C,d,E,F]
x = e
我想删除x
thx提前
joj*_*nas 24
您可以使用对象的索引/指数np.argwhere,然后删除使用对象(或多个)np.delete.
例:
x = np.array([1,2,3,4,5])
index = np.argwhere(x==3)
y = np.delete(x, index)
print(x, y)
Run Code Online (Sandbox Code Playgroud)
Ulf*_*lak 14
把它作为一个numpy数组投射,有一个非常简单的方法:
x = np.array(list("abcdef"))
x = x[x!='e'] # <-- THIS IS THE METHOD
print x
# array(['a', 'b', 'c', 'd', 'f'])
Run Code Online (Sandbox Code Playgroud)
不必比这更复杂.
布尔索引或屏蔽是选择或删除数组特定元素的一种很好的基本方法
您谈论删除特定的“对象”。让我们从字面上理解并定义一个 dtype 对象数组:
In [2]: x=np.array(['a','b','c','d','e'],dtype=object)
In [3]: x
Out[3]: array(['a', 'b', 'c', 'd', 'e'], dtype=object)
In [4]: x=='d' # elements that equal 'd'
Out[4]: array([False, False, False, True, False], dtype=bool)
In [5]: x!='d' # elements that don't
Out[5]: array([ True, True, True, False, True], dtype=bool)
In [6]: x[x!='d'] # select a subset
Out[6]: array(['a', 'b', 'c', 'e'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
在幕后argwhere
,并delete
使用它。请注意,argwhere
使用x==d
布尔数组,将其转换为数组索引。像这样构建掩码是一种delete
操作方式。
有一些重要的限制:
相等(或不相等)测试必须适用于您的价值观。如果元素是浮点数,则可能不会。
从一维数组中删除比从二维(或更大)数组中删除更容易。使用 2d,您必须决定是删除行、列还是元素(并在此过程中将数组展平)。
只删除匹配的一个元素有点棘手。
在某些情况下.tolist()
,使用数组并使用列表方法可能会更好。
In [32]: xl=x.tolist()
In [33]: xl.remove('d')
In [34]: np.array(xl,dtype=object)
Out[34]: array(['a', 'b', 'c', 'e'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
没有完全等同于list.remove
for 数组。