Numpy多维数组从头到尾切片

Numpy multi-dimensional array slicing from end to first

来自 numpy 数组

a=np.arange(100).reshape(10,10)

我要获取数组

[[99, 90, 91],
 [9, 0, 1],
 [19, 10, 11]]

我试过了

a[[-1,0,1],[-1,0,1]]

但这反而给出了 array([99, 0, 11])。我该如何解决这个问题?

a[[-1,0,1],[-1,0,1]] 这是错误的,这意味着您需要来自 row -1column -1 的元素,即 (99)row 0column 0(0)row 1column 1(11) 这就是你得到 array([99, 0, 11])

的原因

你的答案:

a[ [[-1],[0],[1]], [-1,0,1] ]:这意味着,我们想要第 -1, 0, 1 行的每个元素来自第 [-1], [0], [1].

将数组滚动到两个轴上并切片 3x3:

>>> np.roll(a, shift=1, axis=[0,1])[:3, :3]
array([[99, 90, 91],
       [ 9,  0,  1],
       [19, 10, 11]])

将切片分成两个单独的操作

arr[ [ -1,0,1] ][ :, [ -1,0,1]]
# array([[99., 90., 91.],
#        [ 9.,  0.,  1.],
#        [19., 10., 11.]])

相当于:

temp = arr[ [ -1,0,1] ]  # Extract the rows
temp[ :, [ -1,0,1]]      # Extract the columns from those rows
# array([[99., 90., 91.],
#        [ 9.,  0.,  1.],
#        [19., 10., 11.]])