【问题标题】:Axis extraction through a 2d index [duplicate]通过二维索引提取轴[重复]
【发布时间】:2018-03-10 04:14:26
【问题描述】:

我想通过索引一个数组来提取结果

a = np.array([[10,20,30,40,50,60],
              [15,25,35,45,55,65]])

b = np.array([[0,1,2,2,3,4,5,2,5,1,3,4,2,2,3,4,5,2,5,1],
              [0,4,5,2,5,1,3,0,2,1,2,2,3,4,5,2,5,1,3,4]])

预期输出:

a[:,b]  

[[10 20 30 30 40 50 60 30 60 20 40 50 30 30 40 50 60 30 60 20]
 [15 55 65 35 65 25 45 15 35 25 35 35 45 55 65 35 65 25 45 55]]

但实际上得到了:

[[[10 20 30 30 40 50 60 30 60 20 40 50 30 30 40 50 60 30 60 20]
  [10 50 60 30 60 20 40 10 30 20 30 30 40 50 60 30 60 20 40 50]]

 [[15 25 35 35 45 55 65 35 65 25 45 55 35 35 45 55 65 35 65 25]
 [15 55 65 35 65 25 45 15 35 25 35 35 45 55 65 35 65 25 45 55]]]

我可能了解发生了什么,但我不知道如何才能获得正确的输出。我希望得到帮助。谢谢

【问题讨论】:

  • 那是a[:, b] 吗?缺少逗号?
  • 感谢您指出错误已得到纠正
  • 你实际得到的是正确的输出。尝试使用具有 2 或 3 个元素的较小数组。在 a[:,b] 中,“:”表示每一行。因此,输出的第一行将仅包含来自 A 的第一行的元素。输出的第二行将仅包含来自 B 的第二行的元素。

标签: python numpy


【解决方案1】:

你想要

In [219]: a[[[0],[1]],b]
Out[219]: 
array([[10, 20, 30, 30, 40, 50, 60, 30, 60, 20, 40, 50, 30, 30, 40, 50,
        60, 30, 60, 20],
       [15, 55, 65, 35, 65, 25, 45, 15, 35, 25, 35, 35, 45, 55, 65, 35,
        65, 25, 45, 55]])

第一个索引也可以写成np.arange(a.shape[0])[:,None]

【讨论】:

  • 非常完整的解决方案谢谢您的帮助
【解决方案2】:

可以将部分添加在一起,可能是更性感的索引选项

np.stack((a[0,b[0]], a[1,b[1]]))
Out[15]: 
array([[10, 20, 30, 30, 40, 50, 60, 30, 60, 20, 40, 50, 30, 30, 40, 50, 60,
        30, 60, 20],
       [15, 55, 65, 35, 65, 25, 45, 15, 35, 25, 35, 35, 45, 55, 65, 35, 65,
        25, 45, 55]])

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 2021-04-15
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2013-11-19
    相关资源
    最近更新 更多