如何创建一个 Numpy 索引,除了一个变量坐标外,到处都是冒号?
How to create a Numpy Index with colons everywhere except at one variable coordinate?
我想以
的形式创建索引
[:, :, :, 0, :, :, :, :]
其中 0
的位置由变量确定,比如 axis
来切片 NumPy 数组。显然有两种比较容易处理的特殊情况:
axis = 0
等同于 [0, ...]
axis = -1
等同于 [..., 0]
但我想知道如何对任何 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
我想以
的形式创建索引[:, :, :, 0, :, :, :, :]
其中 0
的位置由变量确定,比如 axis
来切片 NumPy 数组。显然有两种比较容易处理的特殊情况:
axis = 0
等同于[0, ...]
axis = -1
等同于[..., 0]
但我想知道如何对任何 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