用numpy解包矩阵的一种优雅方法

2024-10-01 17:42:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我将用一个例子来描述这个问题。有一个矩阵

[[1 2]
 [3 4]]

我需要调整/取消它到下一个

[[1 1 2 2]
 [1 1 2 2]
 [3 3 4 4]
 [3 3 4 4]]

该操作与convnets中的最大池有点相反。我有一个循环的野蛮解决方案。我将非常高兴地看到,如果有一个复杂的解决方案与numpy。 我的暴力解决方案如下。你知道吗

matrix = np.arange(1, 5).reshape(2, 2)
matrix_m, matrix_n = matrix.shape
kernel = np.ones((2, 2), dtype=np.int)
kernel_m, kernel_n = kernel.shape
unpooled_matrix = np.zeros((matrix_m * kernel_m, matrix_n * kernel_n), dtype=np.int)
for i in range(matrix_m):
    pos_i = i * kernel_m
    for j in range(matrix_n):
        pos_j = j * kernel_n
        unpooled_matrix[pos_i: pos_i + kernel_m, pos_j: pos_j + kernel_n] = kernel * matrix[i][j]

print(matrix)
print(kernel)
print(unpooled_matrix)

Tags: inposfornprange矩阵解决方案kernel

热门问题