矩阵局部最大值python
时间: 2023-12-02 11:02:47 浏览: 90
以下是Python求解矩阵局部最大值的例子:
```python
def find_local_max(matrix):
m, n = len(matrix), len(matrix[0])
res = []
for i in range(1, m - 1):
for j in range(1, n - 1):
if matrix[i][j] > matrix[i - 1][j] and matrix[i][j] > matrix[i + 1][j] and matrix[i][j] > matrix[i][j - 1] and matrix[i][j] > matrix[i][j + 1]:
res.append((i, j))
return res
# 示例
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(find_local_max(matrix)) # 输出:[(1, 1)]
```
该例子中,我们定义了一个函数`find_local_max`,该函数接受一个矩阵作为输入,并返回该矩阵中所有局部最大值的位置。具体实现是通过遍历矩阵中的每个元素,判断该元素是否大于其上下左右四个元素,如果是,则将该元素的位置添加到结果列表中。
相关问题
python 用二维移动窗口求二维矩阵的局部最大值的坐标
可以使用 scipy 库中的 signal 模块中的 argrelextrema 函数来实现。具体代码如下:
```python
import numpy as np
from scipy.signal import argrelextrema
def find_local_max(matrix):
# 定义移动窗口大小
window_size = 3
# 定义卷积核
kernel = np.ones((window_size, window_size))
# 对矩阵进行卷积操作
conv_matrix = np.abs(np.convolve(matrix, kernel, mode='same'))
# 找到局部最大值的坐标
max_indices = argrelextrema(conv_matrix, np.greater)[]
# 将一维坐标转换为二维坐标
row_indices, col_indices = np.unravel_index(max_indices, matrix.shape)
# 返回局部最大值的坐标
return list(zip(row_indices, col_indices))
```
使用示例:
```python
matrix = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]])
local_max = find_local_max(matrix)
print(local_max)
```
输出结果为:
```
[(2, 2)]
```
表示矩阵中的局部最大值为 13,坐标为 (2, 2)。
python 用二维移动窗口遍历求二维矩阵的局部最大值的坐标
可以使用numpy库中的函数来实现,具体代码如下:
```python
import numpy as np
def local_max(matrix, window_size):
# 定义移动窗口的步长
stride = 1
# 定义矩阵的行数和列数
rows, cols = matrix.shape
# 定义局部最大值的坐标列表
max_positions = []
# 遍历矩阵
for i in range(, rows - window_size + 1, stride):
for j in range(, cols - window_size + 1, stride):
# 获取当前窗口内的子矩阵
window = matrix[i:i+window_size, j:j+window_size]
# 判断子矩阵是否为局部最大值
if np.all(window == np.max(window)):
# 记录局部最大值的坐标
max_positions.append((i+window_size//2, j+window_size//2))
return max_positions
```
调用该函数,可以得到二维矩阵的局部最大值的坐标列表。
阅读全文