我想做一些类似于此处NumPy数组的操作,更改不在索引列表中的值,但不完全相同。
考虑一个numpy数组:
numpy
> a = np.array([0.2, 5.6, 88, 12, 1.3, 6, 8.9])
我知道我可以通过索引列表访问其元素,例如:
> indxs = [1, 2, 5] > a[indxs] array([ 5.6, 88. , 6. ])
但是我还需要访问那些 不在indxs列表中的元素。天真地,这是:
indxs
> a[not in indxs] > array([0.2, 12, 1.3, 8.9])
正确的方法是什么?
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])
delete比实际需要更广泛,根据输入使用不同的策略。我认为在这种情况下,它使用布尔掩码方法(时序应相似)。
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])