gpt4 book ai didi

python - 如何从任意大小的矩阵中分割每个 3x3 子矩阵?

转载 作者:行者123 更新时间:2023-11-28 21:38:34 25 4
gpt4 key购买 nike

我想从一个更大的矩阵中找到每个 3x3 子矩阵。我一直在研究如何在不知道该矩阵大小的情况下对每个矩阵进行切片。如果我知道它是一个 4x4 矩阵,我可以将每个子矩阵一个一个地切片:

m = [[1, 5, 9, 2], 
[0, 4, 6, 1],
[6, 1, 8, 8],
[4, 7, 3, 5]]

s1 = [m[0][:3], m[1][:3], m[2][:3]]

s1 = [[1, 5, 9],
[0, 4, 6],
[6, 1, 8]]

这只是 4 个中的第一个 3x3 子矩阵。矩阵可以是 3x3、4x3、4x4 等,一直到 10x10。为每个人手动做这件事绝对是不可能的。有没有办法让我在不知道更大矩阵的大小的情况下对每个 3x3 子矩阵进行切片?

最佳答案

从人类的角度来看,矩阵有点令人困惑(呃...至少对于回答 :-P这个人):当你做 m[1][2],第一个 1 决定高度(Y 轴,如果可以的话)而不是宽度 而随后的 2 决定了 width (X 轴),这不是我们人类习惯的。

考虑到这一点,您可以这样做(请注意,我将示例输入 m 更改为 6x5 矩阵,只是为了确保更通用的情况能够正常工作)。

m = [[1, 5, 9, 2, 4, 7],
[0, 4, 6, 1, 5, 7],
[6, 1, 8, 8, 6, 8],
[4, 7, 3, 5, 7, 9],
[8, 9, 6, 3, 1, 1],
]

slice_x = 3
slice_y = 3


def test_slice():
width = len(m[0])
height = len(m)
slices = []
for i in range(0, height - slice_y + 1):
for j in range(0, width - slice_x + 1):
slices.append(
[
[m[a][b] for b in range(j, j + slice_x)]
for a in range(i, i + slice_y)
]
)
return slices


if __name__ == "__main__":
slices = test_slice()
for sl in slices:
for row in sl:
print(row)
print('------')

输出

[1, 5, 9]
[0, 4, 6]
[6, 1, 8]
------
[5, 9, 2]
[4, 6, 1]
[1, 8, 8]
------
[9, 2, 4]
[6, 1, 5]
[8, 8, 6]
------
[2, 4, 7]
[1, 5, 7]
[8, 6, 8]
------
[0, 4, 6]
[6, 1, 8]
[4, 7, 3]
------
[4, 6, 1]
[1, 8, 8]
[7, 3, 5]
------
[6, 1, 5]
[8, 8, 6]
[3, 5, 7]
------
[1, 5, 7]
[8, 6, 8]
[5, 7, 9]
------
[6, 1, 8]
[4, 7, 3]
[8, 9, 6]
------
[1, 8, 8]
[7, 3, 5]
[9, 6, 3]
------
[8, 8, 6]
[3, 5, 7]
[6, 3, 1]
------
[8, 6, 8]
[5, 7, 9]
[3, 1, 1]
------

我相信只要你的 slice_xslice_y 小于 widthheight 分别。尝试使用 slice_xslice_y 的值,并确保它按照您的要求运行。

关于python - 如何从任意大小的矩阵中分割每个 3x3 子矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com