numpy.delete
не удаляет элементы, содержащиеся в b
, он удаляет a[b]
, другими словами, b
должен содержать индексы для удаления.Поскольку ваш b
содержит только значения, превышающие длину a
, никакие значения не удаляются.В настоящее время индексы вне границ игнорируются, но в будущем это не будет так:
/usr/local/bin/ipython3:1: DeprecationWarning: in the future out of bounds indices will raise an error instead of being ignored by `numpy.delete`.
#!/usr/bin/python3
Чистым решением на Python будет использование set
:
set_b = set(b)
c = np.array([x for x in a if x not in set_b])
# array([32, 43, 45, 51, 53])
И использованиеnumpy
широковещательная рассылка для создания маски, определяющей, какие значения следует удалить:
c = a[~(a[None,:] == b[:, None]).any(axis=0)]
# array([32, 43, 45, 51, 53])
Они примерно одинаковы по скорости с данным примером, но подход numpy
подходит и занимает больше памяти (поскольку генерирует2D матрица, содержащая все комбинации a
и b
).