如何将多维数组与另一个多维数组切片?

时间:2019-10-07 10:27:39

标签: python arrays python-3.x numpy slice

我有一个2D阵列:

BlacklistingTextInputFormatter(
  RegExp(
    r'(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])'
  ),
),

和另一个索引:

x = np.array([[4, 5, 6],
              [7, 8, 9]])

如何使用 a 中各行的索引对 x 的每一行进行切片,而不使用循环来获取:

a = np.array([[0, 1],
              [1, 2]])

3 个答案:

答案 0 :(得分:2)

尝试一下:

import numpy as np
x = np.array([[4, 5, 6],
              [7, 8, 9]])
a = np.array([[0, 1],
              [1, 2]])
print(np.take_along_axis(x,a,1))

答案 1 :(得分:0)

您可以使用numpy.take_along_axis

np.take_along_axis(x,a,1)
# array([[4, 5],
#        [8, 9]])

或手动添加第一个坐标(适用广播)

x[np.c_[:2],a]
# array([[4, 5],
#        [8, 9]])

答案 2 :(得分:0)

从技术上讲,我知道这是一个循环,但是您可以使用列表理解功能在一行中完成它。

print(np.array([x[i][a[i]] for i in range(0, x.shape[0])]))