【问题标题】:Selecting rows and columns in numpy array and tensorflow Tensor [duplicate]在numpy数组和tensorflow张量中选择行和列[重复]
【发布时间】:2020-04-27 12:42:08
【问题描述】:

假设我有以下 numpy 数组:

array = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
                  ,[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
                  ,[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]], np.int32)

如果我使用切片,我会得到:

array[1:5,1:5]

array([[2, 3, 4, 5],
       [2, 3, 4, 5],
       [2, 3, 4, 5],
       [2, 3, 4, 5]], dtype=int32)

如果我想选择具有“间隙”的行和列(例如 1,3 和 5),我想要类似的结果。

所以我想选择行和列 1,3,5 并得到:

array([[2, 4, 6],
       [2, 4, 6],
       [2, 4, 6]], dtype=int32)

但我不知道该怎么做。

我想在 tensorflow 2.0 中做同样的事情,但 tf.gather 没有帮助

编辑:当行数和列数没有模式时,切片并不能解决问题

【问题讨论】:

  • @yatu 并没有解决问题。例如,如果我想选择行和列 1,2.4,10 没有模式,切片并不能解决问题
  • @MercyDude 因为请参阅上面的编辑部分
  • @MercyDude 看起来 yatu 已经理解了这个问题。但是谢谢你的努力

标签: python numpy tensorflow


【解决方案1】:

如果想要在给定的索引列表上建立索引,并且您期望通过切片获得的行为,您可以使用 np.ix

ix = [1,3,5]
array[np.ix_(ix,ix)]

array([[2, 4, 6],
       [2, 4, 6],
       [2, 4, 6]])

不确定这在 tensorflow 中是如何完成的,但想法是向其中一个数组添加一个新轴(这在内部由 np.ix_ 处理)。在 pytorch 中,可以这样做:

a[ix.view(-1,1), ix]

tensor([[2, 4, 6],
        [2, 4, 6],
        [2, 4, 6]], dtype=torch.int32)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2014-05-20
    • 2020-12-31
    • 2021-07-22
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多