Я хотел бы нарезать массив numpy, чтобы исключить из него один элемент.
Например, вот так:
a = numpy.array([1,2,3,4,5])
b = a[0:1::3:4]
b = [1 2 4 5]
Только то, что это не работает, значит, либо я что-то не так делаю, либо это невозможно.
Я хотел бы нарезать массив numpy, чтобы исключить из него один элемент.
Например, вот так:
a = numpy.array([1,2,3,4,5])
b = a[0:1::3:4]
b = [1 2 4 5]
Только то, что это не работает, значит, либо я что-то не так делаю, либо это невозможно.
Если вы собираетесь неоднократно «удалять» один элемент за раз, я бы предложил использовать логическую маску:
In [493]: a = np.arange(100)
In [494]: mask = np.ones(a.shape, dtype=bool)
In [495]: for i in [2,5,9,20,3,26,40,60]:
...: mask[i]=0
...: a1 = a[mask]
In [496]: a1.shape
Out[496]: (92,)
Это фактически то, что np.delete
делает, когда дается список или массив удалений
In [497]: a2 = np.delete(a, [2,5,9,20,3,26,40,60])
In [498]: np.allclose(a1,a2)
Out[498]: True
Для одного элемента объединяются два слайса - либо путем конкатенации, либо путем копирования в массив result
нужного размера. Во всех случаях мы должны создать новый массив.
Одно исключение или много, вы ищете прерывистый выбор элементов оригинала. Этого нельзя добиться с помощью view
, который использует shape
и strides
для выбора обычного подмножества оригинала.
Вам нужно сделать что-то вроде ниже
a = np.array([1,2,3,4,5])
b = a[:2]
c = a[3:]
print ( b )
print ( c )
z= np.concatenate((b,c),axis=None)
print ( z )
Output:
[1 2]
[4 5]
[1 2 4 5]
Следовательно, здесь все, кроме 3, находится в новом numpy.ndarray z здесь. Другой способ - использовать функцию np.delete, как показано в одном из ответов, где вы можете указать список индексов, которые нужно удалить внутри [], где список содержит индекс, разделенный запятыми, который нужно удалить.
a = np.array([15,14,13,12,11])
a4=np.delete(a,[1,4])
print(a4)
output is :
[15 13 12]
Вы всегда можете использовать наборы нарезки
b = a[:2]+a[3:]
Вернется [1, 2, 4, 5]
для возвращаемого значения numpy вы можете сделать 2 среза и объединить результаты.
b = a[3:]
c = a[:2]
numpy.concatenate([c,b])
Вернется
array([1, 2, 4, 5])
+
— это соединение для списков, но не для массивов.
- person hpaulj; 09.06.2019
np.delete
. Однако внутри он просто соединит два отдельных фрагмента. Вы не можете сделать это только с одним кусочком. Результат должен бытьcopy
, а неview
. - person hpaulj   schedule 09.06.2019