如果您想要一个视图并且想要快速查看,您可以手动创建索引:
arr[(slice(None), )*5 + (your_index, )]# ^---- This is equivalent to 5 colons: `:, :, :, :, :`
它
np.take比使用
:s索引快得多,并且仅慢一点:
import numpy as nparr = np.random.random((10, 10, 10, 10, 10, 10, 10))np.testing.assert_array_equal(arr[:,:,:,:,:,4], arr.take(4, axis=5))np.testing.assert_array_equal(arr[:,:,:,:,:,4], arr[(slice(None), )*5 + (4, )])%timeit arr.take(4, axis=5)# 18.6 ms ± 249 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)%timeit arr[(slice(None), )*5 + (4, )]# 2.72 µs ± 39.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)%timeit arr[:, :, :, :, :, 4]# 2.29 µs ± 107 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
但是可能不那么可读,因此,如果经常需要,您可能应该将其放在具有有意义名称的函数中:
def index_axis(arr, index, axis): return arr[(slice(None), )*axis + (index, )]np.testing.assert_array_equal(arr[:,:,:,:,:,4], index_axis(arr, 4, axis=5))%timeit index_axis(arr, 4, axis=5)# 3.79 µs ± 127 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)



