从一个 10 行 10 列的矩阵中提取出连续的 3 行 3 列区块。用 Python 与 第三方库 numpy 编写程序实现。(提示:使用 np.lib.stride_tricks.as_strided() 是矩阵分块函数)
时间: 2024-09-26 12:05:16 浏览: 52
在Python中,我们可以使用numpy库中的`as_strided()`函数来实现从一个大矩阵中提取连续的3行3列小矩阵的功能。`as_strided()`允许我们创建一个新的数组视图,它基于源数组的一个子区域,同时保持原数据未动。
这是一个示例代码:
```python
import numpy as np
# 创建一个10行10列的随机矩阵
matrix = np.random.rand(10, 10)
# 设置目标块的尺寸和步长
block_size = (3, 3)
step = (1, 1) # 我们希望每次移动一行一列,所以步长为1
# 使用as_strided计算新的形状、 strides 和起始索引
new_shape = matrix.shape[:-2] + block_size
strides = matrix.strides * step
start = matrix.strides[:-2]
# 提取连续的3x3块
blocks = np.lib.stride_tricks.as_strided(matrix, shape=new_shape, strides=strides, start=start)
print(blocks)
```
这个代码会返回一个大小为 `(8, 8)` 的新数组,其中每个元素都是原始矩阵中的连续3行3列部分。
阅读全文