如何创建一个 Numpy 索引,除了一个变量坐标外,到处都是冒号?

How to create a Numpy Index with colons everywhere except at one variable coordinate?

我想以

的形式创建索引
[:, :, :, 0, :, :, :, :]

其中 0 的位置由变量确定,比如 axis 来切片 NumPy 数组。显然有两种比较容易处理的特殊情况:

但我想知道如何对任何 axis 值执行此操作?

您可以创建一个元组并使用 slice(None) 代替 ::

def custom_index(arr, position, index):
    idx = [slice(None)] * len(arr.shape)
    idx[position] = index
    return arr[tuple(idx)]

快速测试:

mat = np.random.random((5, 3))
assert np.all(mat[2, :] == custom_index(mat, 0, 2))  # mat[(2, slice(None))]
assert np.all(mat[:, 2] == custom_index(mat, 1, 2))  # mat[(slice(None), 2))]

编辑: 正如评论中指出的那样,正确的方法是 np.take