我有一个函数接受一个多维数组,一个轴号和我想得到的索引:
def get_slice(my_array, dimension, index):
if dimension == 0:
slice = my_array[index, :, :]
elif dimension == 1:
slice = my_array[:, index, :]
else:
slice = my_array[:, :, index]
return np.squeeze(slice)
但是,我现在必须更改代码以接受4维,我想知道在python中是否有更通用的方法来执行此操作?
所以,我正在寻找一个函数,它接受一般的n维数组,维度(轴)和在该维度/轴上选择的索引,并返回该维度上该索引的整个切片。
答案 0 :(得分:1)
当然,实际上并不太难:
def get_slice(my_array, dimension, index):
items = [slice(None, None, None)] * my_array.ndim
items[dimension] = index
array_slice = my_array[tuple(items)]
return np.squeeze(array_slice)
虽然我认为这对您没有帮助,但如果您有一个功能,并且想要沿第一维或最后一维切片,可以使用Ellipsis
:
def get_slice_along_first_dim(array_with_arbitrary_dimensions, idx):
return array_with_arbitrary_dimensions[idx, ...]
def get_slice_along_last_dim(array_with_arbitrary_dimensions, idx):
return array_with_arbitrary_dimensions[..., idx]
您甚至可以执行以下操作:
arr[..., 3, :, 8]
arr[1, ..., 6]
如果我没记错的话。 Ellipsis
对象只需填充所需的空切片即可填写维度。
您不能做的是将超过1个省略号对象传递给__getitem__
:
arr[..., 1, ...] # Fail.