Подтвердить что ты не робот

Как получить все значения из массива numpy, исключая определенный индекс?

У меня есть массив 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]
4b9b3361

Ответ 1

Как и изменение размера, удаление элементов из массива 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]

но, как упоминалось выше, избегайте его, если это возможно.

Ответ 2

a_new = np.delete(a, 3, 0)

3 Вот индекс, который вы хотите удалить, 0 - это ось (нуль в этом случае, если используется 1D-массив). См. np.delete

Ответ 3

Здесь однострочный, если a - массив с несколькими значениями:

>>> a[np.arange(len(a))!=3]
array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])

Ответ 4

Это должно сделать это:

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]

Ответ 5

Другим решением является использование функции 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])