numpy中的数组索引

问题描述:

numpy有没有办法检索数组中除提供的索引项以外的所有项。numpy中的数组索引

x = 
array([[[4, 2, 3], 
    [2, 0, 1], 
    [1, 3, 4]], 

    [[2, 1, 2], 
    [3, 2, 3], 
    [3, 4, 2]], 

    [[2, 4, 1], 
    [0, 2, 2], 
    [4, 0, 0]]]) 

,并通过询问

x[not 1,:,:] 

你会得到

array([[[4, 2, 3], 
    [2, 0, 1], 
    [1, 3, 4]], 

    [[2, 4, 1], 
    [0, 2, 2], 
    [4, 0, 0]]]) 

感谢

+0

为您简单的例子,你可以用'X [:: 2:,:]' – wim 2012-01-03 12:36:35

+0

所以如果X = np.random。 ranint(10,size =(1000,3,3)),我试图得到没有第三个3X3矩阵的矩阵视图。你的方法不能一概而论:) – JustInTime 2012-01-03 12:43:58

+0

对于一般情况,我认为用元组索引是最简单的..虽然也许有一些我不知道的numpy魔法! – wim 2012-01-03 12:46:21

In [42]: x[np.arange(x.shape[0])!=1,:,:] 
Out[42]: 
array([[[4, 2, 3], 
     [2, 0, 1], 
     [1, 3, 4]], 

     [[2, 4, 1], 
     [0, 2, 2], 
     [4, 0, 0]]]) 
+0

+1这真漂亮!用'x [np.arange(x.shape [0])!= 1,:,:]'它会更完美:-) – eumiro 2012-01-03 12:45:47

+0

感谢您的改进,eurimo。 – unutbu 2012-01-03 12:47:43

+0

我知道unutbu会给出一个很好的答案:)即使'x [np.arange(x.shape [0])!= 1]'会工作,其他暗淡将默认采用':' – wim 2012-01-03 12:49:55

你试过吗?

a[(0,2), :, :] 

您可以尝试将您不想获得的内容列入黑名单,而不是列入黑名单。

如果您需要反正黑名单,你可以做这样的事情:

a[[i for i in range(a.shape[0]) if i != 1], :, :] 

基本上你只创建了所有可能的指标(range(a.shape[0]))列表,并过滤掉那些你不想让显示(if i != 1)。

+0

如果我有1000个2D矩阵怎么办?应该是(0,2,3,4,...)。 – JustInTime 2012-01-03 12:42:54

+0

@JustInTime我不确定我是否理解,但'[我为我在范围内(a.shape [0])如果我!= 1]'表达式可以让你创建一个掩码,你需要的所有索引,除了' 1',不管矩阵的数量是多少,因为使用了'a.shape [0]'。 – jcollado 2012-01-03 12:46:07

这是一个非常通用的解决方案:

x[range(0,i)+range(i+1,x.shape[0]),:,:]