Python 通过二维索引提取轴

Python 通过二维索引提取轴,python,numpy,Python,Numpy,我想通过索引数组来提取结果 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

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

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

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

可以一起添加零件,这可能是一个更性感的索引选项

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

可以将零件添加到一起,这可能是一个更性感的索引选项

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]])
你想要

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.arangea.shape[0][:,None]

您想要的

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.arangea.shape[0][:,None]

那是a[:,b]?缺少一个逗号?感谢您指出错误已经纠正。您实际得到的是正确的输出。用一个较小的数组,2或3个元素来尝试。在a[:,b]中:表示每一行。因此,输出的第一行将只包含来自A的第一行的元素。输出的第二行将只包含来自B的第二行的元素。是A[:,B]?缺少一个逗号?感谢您指出错误已经纠正。您实际得到的是正确的输出。用一个较小的数组,2或3个元素来尝试。在a[:,b]中:表示每一行。因此,输出的第一行将只包含来自A的第一行的元素。输出的第二行将只包含来自B的第二行的元素。非常完整的解决方案谢谢您的帮助非常完整的解决方案谢谢您的帮助