题解 | 卷积操作
卷积操作
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()
查看28道真题和解析