切片数组以排除单个元素

时间:2019-06-09 00:07:33

标签: python arrays numpy slice numpy-ndarray

我想切片一个numpy数组,以便可以从中排除单个元素。

例如,像这样:

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

仅这是行不通的,所以我做错了或不可能。

4 个答案:

答案 0 :(得分:1)

如果您一次要重复“删除”一项,建议您使用布尔掩码:

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数组。在所有情况下,我们都必须创建一个新数组。

一个或多个排除项,您会寻找不连续的原始元素选择。使用viewshape来选择原始的常规子集的strides无法实现。

答案 1 :(得分:0)

您需要执行以下操作

 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]

答案 2 :(得分:0)

import numpy as np

a = np.array([1,2,3,4,5])
result = np.delete(a,2)
result = [1,2,4,5]

答案 3 :(得分:-2)

您始终可以使用切片

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