期中考詳解

題目描述

給定一個 n×n 的整數矩陣,其中 n 為偶數且介於4到20之間。你的任務是對這個矩陣進行 2x2 的平均池化操作。題目本人

概念介紹

矩陣(Matrix)

矩陣是一種數學的數據結構,用於表示數據的二維排列。在這題中,矩陣是由整數構成,並且具有 n×n 的規模。

平均池化(Average Pooling)

平均池化是深度學習中常見的一種降維技術,特別是在處理影像數據時。它的基本思想是取一個區塊(例如2x2的區域)內所有元素的平均值。這樣做可以減少數據的空間尺寸,同時保留重要的特徵。在本題中,每個2x2的子矩陣代表一個處理單元。

格式化輸出

在輸出時保留兩位小數是一種常見的數據呈現方式,可以讓結果更加精確且易於閱讀。在C++中,我們使用 printf("%.2f ",avg); 來實現,而在Python中,我們使用字符串格式化 f"{avg:.2f}" 來實現。

C++ 解答

#include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<vector<int>> matrix(n, vector<int>(n)); // 讀取矩陣 for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) cin >> matrix[i][j]; // 進行平均池化 for (int i = 0; i < n; i += 2) { for (int j = 0; j < n; j += 2) { double avg = (matrix[i][j] + matrix[i][j+1] + matrix[i+1][j] + matrix[i+1][j+1]) / 4.0; printf("%.2f ",avg); } printf("\n"); } return 0; }

Python 版解答_1

import sys # 導入sys模組以使用stdin input = sys.stdin.read # 從標準輸入讀取所有輸入資料 data = input().split() # 將輸入資料以空白分割成列表 n = int(data[0]) # 讀取矩陣的大小n matrix = [[int(data[i*n+j+1]) for j in range(n)] for i in range(n)] # 使用列表解析式讀取矩陣數據並轉換為整數 for i in range(0, n, 2): # 外層迴圈以步長2遍歷行,進行平均池化 for j in range(0, n, 2): # 內層迴圈以步長2遍歷列 avg = (matrix[i][j] + matrix[i][j+1] + matrix[i+1][j] + matrix[i+1][j+1]) / 4.0 # 計算4個元素的平均值 print(f"{avg:.2f} ", end='') # 格式化輸出平均值,保留兩位小數 print() # 每完成一行的輸出後換行

Python 版解答_2

n = int(input()) # 矩陣的大小 matrix = [] # 初始化矩陣 # 讀取矩陣的每一行 for i in range(n): row = input().split() matrix.append([int(num) for num in row]) for i in range(0, n, 2): # 外層迴圈以步長2遍歷行,進行平均池化 for j in range(0, n, 2): # 內層迴圈以步長2遍歷列 avg = (matrix[i][j] + matrix[i][j+1] + matrix[i+1][j] + matrix[i+1][j+1]) / 4.0 # 計算4個元素的平均值 print(f"{avg:.2f} ", end='') # 格式化輸出平均值,保留兩位小數 print() # 每完成一行的輸出後換行