In [524]: a=np.array([10, 31, 30, 11, 17, 12, 22, 25, 85, 17, 21, 43])
In [525]: b=np.array([0, 1, 4, 6])
Чтобы сделать логическое c
, что это правда на b
индексы, просто используйте:
In [526]: c=np.zeros(a.shape, bool)
In [527]: c[b]=True
In [528]: c
Out[528]:
array([ True, True, False, False, True, False, True, False, False,
False, False, False], dtype=bool)
Затем вы можете выбрать значения a
с:
In [529]: a[c]
Out[529]: array([10, 31, 17, 22])
но вам могли бы также выбрать их с помощью b
:
In [530]: a[b]
Out[530]: array([10, 31, 17, 22])
но c
подходит для снятия с охраны, a[~c]
. np.delete(a,b)
делает то же самое.
Другие методы массива генерации c
являются
np.in1d(np.arange(a.shape[0]),b)
np.any(np.arange(a.shape[0])==b[:,None],0)
И так как я как раз обсуждали замаскированных массивы другой вопрос, я мог бы сделать то же самое здесь:
In [542]: np.ma.MaskedArray(a,c)
Out[542]:
masked_array(data = [-- -- 30 11 -- 12 -- 25 85 17 21 43],
mask = [ True True False False True False True False False False False False],
fill_value = 999999)
Посмотрите в 'np.arange' и 'np.in1d'. – Divakar