如何在Python中从4X4矩阵切出2X2矩阵?

1 投票
1 回答
1795 浏览
提问于 2025-04-18 13:20

我正在了解在 Python 3 中引入的 Ellipsis 的用法。

考虑这个矩阵:

A=[
   [1,2,3,4],
   [5,6,7,8],
   [9,10,11,12],
   [13,14,15,16]
  ]

我想从中提取出各种 2 X 2 的小矩阵,最好能用切片的方式来实现:

比如:

左上角:

B=[
  [1,2],
  [3,4]
  ]

右下角:

c=[
  [[9,10],
   [13,14]
  ]

中间的 2 X 2:

 d=[
    [6,7],
    [10,11]
    ]

我想尽量不使用循环来实现这个功能。请问 Ellipsis 能帮助我从这个高维数组中提取出小矩阵吗?

我尝试了以下方法:

>>> a[:2][:2]
[[1, 2, 3, 4], [5, 6, 7, 8]]
>>> a[:2][:2][:2]
[[1, 2, 3, 4], [5, 6, 7, 8]]
>>> 

但最后两个调用返回的子矩阵是一样的,这并不是我想要的结果。

1 个回答

2

你可能想要使用列表推导式...

左上角:

[x[:2] for x in a[:2]]

右上角:

[x[2:] for x in a[:2]]

中间:

[x[1:3] for x in a[1:3]] or [x[1:3] for x in a[2:4]]

简单来说,你需要做的是去掉你不想要的行(这就是a[k:l]中的x在做的事情),然后再去掉一些列,用x[m:n]来实现。

撰写回答