我想切片一个numpy数组,以便可以从中排除单个元素。
例如,像这样:
a = numpy.array([1,2,3,4,5])
b = a[0:1::3:4]
b = [1 2 4 5]
仅这是行不通的,所以我做错了或不可能。
答案 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
数组。在所有情况下,我们都必须创建一个新数组。
一个或多个排除项,您会寻找不连续的原始元素选择。使用view
和shape
来选择原始的常规子集的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])