Python使用数组轴来选择切片

时间:2014-03-27 15:30:19

标签: python arrays numpy indexing

我有一个函数接受一个多维数组,一个轴号和我想得到的索引:

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维数组,维度(轴)和在该维度/轴上选择的索引,并返回该维度上该索引的整个切片。

1 个答案:

答案 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.