Dynamic axis indexing of Numpy ndarray

后端 未结 2 1091
梦谈多话
梦谈多话 2021-01-18 01:29

I want to obtain the 2D slice in a given direction of a 3D array where the direction (or the axis from where the slice is going to be extracted) is given by ano

2条回答
  •  执笔经年
    2021-01-18 02:07

    To index a dimension dynamically, you can use swapaxes, as shown below:

    a = np.arange(7 * 8 * 9).reshape((7, 8, 9))
    
    axis = 1
    idx = 2
    
    np.swapaxes(a, 0, axis)[idx]
    

    Runtime comparison

    Natural method (non dynamic) :

    %timeit a[:, idx, :]
    300 ns ± 1.58 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    

    swapaxes:

    %timeit np.swapaxes(a, 0, axis)[idx]
    752 ns ± 4.54 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    

    Index with list comprehension:

    %timeit a[[idx if i==axis else slice(None) for i in range(a.ndim)]]
    

提交回复
热议问题