NumPy中的数组索引

4
有没有办法在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]]])

谢谢


对于您的简单示例,您可以使用 x[::2,:,:] - wim
如果 x = np.random.ranint(10,size=(1000,3,3)),我想在不包括第 i 个 3X3 矩阵的情况下查看矩阵。你的方法无法推广 :) - JustInTime
对于一般情况,我认为使用元组进行索引可能是最简单的方法。虽然也许有一些我不知道的numpy魔法! - wim
3个回答

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

这简直太棒了!使用 x[np.arange(x.shape[0])!=1,:,:] 就更完美了 :-) - eumiro
感谢您的改进,eurimo。 - unutbu
我知道unutbu会给出一个很好的答案 :) 即使x[np.arange(x.shape[0]) != 1]也可以工作,其他维度默认使用: - wim

2
你尝试过这个吗?
a[(0,2), :, :]

不要只是列出你不需要的东西,而是尝试列出你需要的东西。

如果你确实需要列出黑名单,可以使用以下方法:

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

基本上,您只需创建一个包含所有可能索引的列表 (range(a.shape[0])) 并过滤掉您不想显示的内容 (if i != 1)。


如果我有1000个二维矩阵怎么办?应该是(0,2,3,4,...)吗? - JustInTime
@JustInTime,我不确定我理解了你的意思,但是[i for i in range(a.shape[0]) if i != 1]表达式将让你创建一个掩码,用于除了1之外的所有所需索引,而不管矩阵数量,因为使用了a.shape[0] - jcollado

2
这是一个相当通用的解决方案:
x[range(0,i)+range(i+1,x.shape[0]),:,:] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接