【发布时间】:2020-04-14 06:44:42
【问题描述】:
假设我有一个 (m x n) 二维 numpy 数组,它只有 0 和 1。我想通过在数组上运行例如 3x3 内核并获取该内核中的多数值来“平滑”数组。对于边缘的值,我会忽略“缺失”的值。
例如,假设数组看起来像
import numpy as np
x = np.array([[1, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 1, 0, 1, 1, 0],
[0, 0, 1, 0, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 0, 1, 0],
[0, 0, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
从左上角的“1”开始,以第一个左上角元素为中心的 3 x 3 内核将丢失第一行和第一列。我想要处理的方式就是忽略它并考虑剩余的 2 x 2 矩阵:
1 0
0 0
在这种情况下,多数值为 0,因此将该元素设置为 0。对所有元素重复此操作,我想要的结果二维数组是:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0
0 0 1 1 1 1 1 0
0 0 1 1 1 1 1 0
0 0 1 1 1 1 1 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0
我该如何做到这一点?
【问题讨论】:
-
你在 scipy 中见过rank_filter 吗?它可能无法解决问题。但它让我想起了这一点。
标签: python numpy convolution