将 2d NumPy 数组的接近元素转换为接近平均值

问题描述 投票:0回答:2

我拥有的是一个 numpy 数组的数组(一个 2d numpy 数组)。

    my_array = [
        [1, 2, 3, 4]
        [1, 2, 3, 4]
        [2, 3, 4, 5]
        [2, 3, 4, 5]
    ]

我想把它变成:

    proximity = 2 
    my_array = [ 
        [1.5, 1.5, 3.5, 3.5]
        [1.5, 1.5, 3.5, 3.5]
        [2.5, 2.5, 4.5, 4.5]
        [2.5, 2.5, 4.5, 4.5]
    ]

我有这段代码:

    proximity = 2
    for i in range(0, len(my_array), proximity):
        for j in range(0, len(my_array), proximity):
            ii = i + proximity 
            jj = j + proximity 
            my_array[i:ii, j:jj] = np.average(my_array[i:ii, j:jj])

现在我当前的解决方案可以解决问题,但我想知道纯 numpy 解决方案,一个没有我使用的 2 个“for”循环的解决方案。

numpy numpy-ndarray numpy-slicing
2个回答
0
投票

假设它的目标是方阵,将数组重塑为方阵子矩阵并将其均值复制到初始形状:

my_array = my_array.reshape(-1, 2, 2).mean(-1).repeat((2, 2), axis=-1)
print(my_array)

[[1.5 1.5 3.5 3.5]
 [1.5 1.5 3.5 3.5]
 [2.5 2.5 4.5 4.5]
 [2.5 2.5 4.5 4.5]]

0
投票

如果保证每个维度都能被

proximity
整除,你可以重塑:

(my_array.reshape(rows//2, proximity, cols//2, proximity)
   .mean(axis=(1,3))
   .repeat(proximity, axis=0)
   .repeat(proximity, axis=1)
)

输出:

array([[1.5, 1.5, 3.5, 3.5],
       [1.5, 1.5, 3.5, 3.5],
       [2.5, 2.5, 4.5, 4.5],
       [2.5, 2.5, 4.5, 4.5]])
© www.soinside.com 2019 - 2024. All rights reserved.