Нарезать массив, чтобы исключить один элемент - PullRequest
1 голос
/ 09 июня 2019

Я бы хотел нарезать массив пустышек, чтобы исключить из него один элемент.

Например, вот так:

a = numpy.array([1,2,3,4,5])
b = a[0:1::3:4]
b = [1 2 4 5]

Только то, что это не работает, так что я либо делаю что-то не так, либо это невозможно.

Ответы [ 4 ]

1 голос
/ 09 июня 2019

Если вы собираетесь неоднократно «удалять» один элемент за раз, я бы предложил использовать логическую маску:

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 для выбора обычного подмножества оригинала.

0 голосов
/ 09 июня 2019
import numpy as np

a = np.array([1,2,3,4,5])
result = np.delete(a,2)
result = [1,2,4,5]
0 голосов
/ 09 июня 2019

Вам нужно сделать что-то вроде ниже

 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]
0 голосов
/ 09 июня 2019

Вы всегда можете использовать наборы срезов

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])
...