题解 | 卷积操作

卷积操作

https://www.nowcoder.com/practice/d507fef9504f4fbf830ef982322f83f8

import sys
import numpy as np

def main():
    C, H_in, W_in = [int(v) for v in sys.stdin.readline().split()]
    input = []
    for c in range(C):
        channel = []
        for h in range(H_in):
            data = [int(v) for v in sys.stdin.readline().split()]
            channel.append(data)
        input.append(channel)
    input = np.array(input)

    C, KH_in, KW_in = [int(v) for v in sys.stdin.readline().split()]
    kernel = []
    for c in range(C):
        channel = []
        for h in range(KH_in):
            data = [int(v) for v in sys.stdin.readline().split()]
            channel.append(data)
        kernel.append(channel)
    kernel = np.array(kernel)
    stride, padding = [int(v) for v in sys.stdin.readline().split()]
    matrix = np.zeros((C, padding * 2 + H_in, padding * 2 + W_in))
    matrix[0:C,padding:padding+H_in,padding:padding+W_in] = input
    H_out = (2*padding + H_in - KH_in) // stride + 1
    W_out = (2*padding + W_in - KW_in) // stride + 1
    output = np.zeros((C, H_out, W_out))
    for c in range(C):
        for i in range(H_out):
            for j in range(W_out):
                m_i = i*stride
                m_j = j*stride
                s = matrix[c,m_i:m_i+KH_in,m_j:m_j+KW_in]
                output[c,i,j] = np.sum(s * kernel)

    output = np.mean(output, axis=0).tolist()
    for row in output:
        str = " ".join([f"{int(v)}" for v in row])
        print(str)



if __name__ == "__main__":
    main()

全部评论

相关推荐

烤点老白薯:亲娘嘞🐶💩啊你的简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务