【问题标题】:Array indexing in numpynumpy中的数组索引
【发布时间】:2012-01-03 12:30:25
【问题描述】:

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,:,:]
  • 那么如果 x = np.random.ranint(10,size=(1000,3,3)) 并且我试图在没有第 i 个 3X3 矩阵的情况下查看矩阵。你的方法不能一概而论:)
  • 对于一般情况,我认为使用元组进行索引是最简单的.. 虽然可能有一些我不知道的 numpy 魔法!

标签: python numpy


【解决方案1】:
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]]])

【讨论】:

  • +1 这简直太美了!有了x[np.arange(x.shape[0])!=1,:,:] 那就更完美了:-)
  • 感谢 eurimo 的改进。
  • 我知道 unutbu 会给出一个很好的答案 :) 即使x[np.arange(x.shape[0]) != 1] 也可以,其他暗淡将默认使用:
【解决方案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 我不确定我是否理解,但[i for i in range(a.shape[0]) if i != 1] 表达式将允许您为除1 之外的所有索引创建掩码,因为a.shape[0] 而不管矩阵数量如何用法。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2013-06-05
    • 2011-11-18
    相关资源
    最近更新 更多