如何使用 python 对 2 维数组进行下采样?

How to downsample a 2 dimensions array using python?

提问人:P. Scotty 提问时间:3/20/2023 更新时间:3/20/2023 访问量:107

问:

我正在尝试使用 python 重建一个项目,其中一步需要我将一个二维数组下采样到一个较小的数组中。

像这样的数组:

[[1.0, 2.0, 1.0, 3.0, ..., 2.0]
 [2.0, 4.0, 6.0, 8.0, ..., 3.0]
 ...
 [3.0, 1.0, 6.0, 2.0, ..., 9.0]]

(举个例子)

我想将其下采样为较小的,但保留其功能。我不擅长深度学习,只是想从中扩展一些概念。我尝试用零外部填充数组(填充 = 1),卷积核大小为 3x3。但是我发现这种方式不能将数组放大到更小,所以我将步幅改为2(代码:for j in range(1, EMatrix.shape[0]-1, 2),但是这导致新数组包含一些零行和列,我不知道如何处理。

我的代码(部分):

from shapely.geometry import box
from shapely.geometry import MultiPoint

import matplotlib.pyplot as plt

import numpy as np
import math
from sklearn import preprocessing

def Down_Sample(EMatrix):
    """
    Description: 

    Parameters: EMatrix (Type: 2-dim array)

    Return: 
    """

    # EMatrix = preprocessing.scale(EMatrix)
    EMatrix = np.pad(EMatrix, (1, 1), 'constant')
    DownSampleMatrix = np.empty((EMatrix.shape[0]-2, EMatrix.shape[1]-2), dtype=float)
    for j in range(1, EMatrix.shape[0]-1, 2):
        for i in range(1, EMatrix.shape[1]-1, 2):
            DownSampleMatrix[j-1][i-1] = max(EMatrix[j-1][i-1], EMatrix[j-1][i], EMatrix[j-1][i+1], \
                EMatrix[j][i-1], EMatrix[j][i], EMatrix[j][i+1], \
                EMatrix[j+1][i-1], EMatrix[j+1][i], EMatrix[j+1][i+1])


    return DownSampleMatrix

Left is origin array, Right is Downsampled array

我找到了一个答案:在python中对2d numpy数组进行下采样,但它的方法似乎不适合我的场景。

如果 sklearn 或其他软件包中有现成的方法,任何方法都可以。

Python 数组 缩减采样

评论

0赞 pho 3/20/2023
如果我不设置“下采样”数组的每隔一行和一列,我会期望第二张图像!“这种方式不能将数组放大到更小”是什么意思?如果您希望下采样数组是原始数组的每隔一个像素,那么您链接的答案中显示的方法应该有效。你能详细说明为什么它对你不起作用吗?

答: 暂无答案