У меня есть массив numpy, и я хочу получить все элементы, кроме определенного индекса. Например, рассмотрим следующий массив
a = [0,1,2,3,4,5,5,6,7,8,9]
если я укажу индекс 3, тогда результат должен быть
a = [0,1,2,4,5,5,6,7,8,9]
У меня есть массив numpy, и я хочу получить все элементы, кроме определенного индекса. Например, рассмотрим следующий массив
a = [0,1,2,3,4,5,5,6,7,8,9]
если я укажу индекс 3, тогда результат должен быть
a = [0,1,2,4,5,5,6,7,8,9]
Как и изменение размера, удаление элементов из массива numpy является медленной (особенно для больших массивов, поскольку для этого требуется выделить пространство и скопировать все данные из исходного массива в новый массив). Его следует избегать, если это возможно.
Часто вы можете избежать этого, работая с маскированным массивом. Например, рассмотрим массив a
:
import numpy as np
a = np.array([0,1,2,3,4,5,5,6,7,8,9])
print(a)
print(a.sum())
# [0 1 2 3 4 5 5 6 7 8 9]
# 50
Мы можем замаскировать его значение в индексе 3 и выполнить суммирование, которое игнорирует маскированные элементы:
a = np.ma.array(a, mask=False)
a.mask[3] = True
print(a)
print(a.sum())
# [0 1 2 -- 4 5 5 6 7 8 9]
# 47
Маскированные массивы также поддерживают многие операции, кроме sum
.
Если вам действительно нужно, также можно удалить маскированные элементы с помощью метода compressed
:
print(a.compressed())
# [0 1 2 4 5 5 6 7 8 9]
но, как упоминалось выше, избегайте его, если это возможно.
a_new = np.delete(a, 3, 0)
3
Вот индекс, который вы хотите удалить, 0
- это ось (нуль в этом случае, если используется 1D-массив). См. np.delete
Здесь однострочный, если a - массив с несколькими значениями:
>>> a[np.arange(len(a))!=3]
array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
Это должно сделать это:
In [9]: np.hstack((a[:3], a[4:]))
Out[9]: array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
Если производительность является проблемой, следующее будет выполняться:
In [22]: a[3:-1] = a[4:]; a = a[:-1]
Другим решением является использование функции concatenate numpy
>>> x = np.arange(0,10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> i = 3
>>> np.concatenate((x[:i],x[(i+1):]))
array([0, 1, 2, 4, 5, 6, 7, 8, 9])