Gab*_*iel 9 python arrays numpy
我想做一些类似于这里询问的NumPy 数组,更改不在索引列表中但不完全相同的值。
考虑一个numpy数组:
> a = np.array([0.2, 5.6, 88, 12, 1.3, 6, 8.9])
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过索引列表访问它的元素,例如:
> indxs = [1, 2, 5]
> a[indxs]
array([ 5.6, 88. , 6. ])
Run Code Online (Sandbox Code Playgroud)
但我还需要访问那些不在indxs列表中的元素。天真地,这是:
> a[not in indxs]
> array([0.2, 12, 1.3, 8.9])
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
hpa*_*ulj 12
In [170]: a = np.array([0.2, 5.6, 88, 12, 1.3, 6, 8.9])
In [171]: idx=[1,2,5]
In [172]: a[idx]
Out[172]: array([ 5.6, 88. , 6. ])
In [173]: np.delete(a,idx)
Out[173]: array([ 0.2, 12. , 1.3, 8.9])
Run Code Online (Sandbox Code Playgroud)
delete比您真正需要的更通用,根据输入使用不同的策略。我认为在这种情况下它使用布尔掩码方法(时间应该相似)。
In [175]: mask=np.ones_like(a, bool)
In [176]: mask
Out[176]: array([ True, True, True, True, True, True, True], dtype=bool)
In [177]: mask[idx]=False
In [178]: mask
Out[178]: array([ True, False, False, True, True, False, True], dtype=bool)
In [179]: a[mask]
Out[179]: array([ 0.2, 12. , 1.3, 8.9])
Run Code Online (Sandbox Code Playgroud)
一种方法是使用布尔掩码并将索引反转为假:
mask = np.ones(a.size, dtype=bool)
mask[indxs] = False
a[mask]
Run Code Online (Sandbox Code Playgroud)
一种方法是np.in1d创建当前掩码indxs,然后将其反转并用它索引输入数组以获得所需的输出 -
a[~np.in1d(np.arange(a.size),indxs)]
Run Code Online (Sandbox Code Playgroud)