Python - 不等尺寸矩陣列最小值
在 Python 中,當處理行長度不一的矩陣時,找到每列最小值的效率至關重要。有多種方法可以解決此任務,每種方法都有其自身的優勢和適用場景。本文將深入探討幾種方法:從基本的巢狀迴圈到高階工具,如 NumPy 和 Pandas。
最終,您將全面掌握兩項關鍵技能:掌握不等尺寸矩陣的操作以及從中提取有價值的資訊。
方法 1:使用巢狀迴圈
此方法使用巢狀迴圈遍歷矩陣,並仔細記錄每列的最小值。雖然此方法對於較小的矩陣有效,但當應用於較大的資料集時,其效率可能會下降。
示例
matrix = [ [3, 8, 1], [4, 2], [9, 6, 5, 7] ] max_row_length = max(len(row) for row in matrix) column_minima = [float('inf')] * max_row_length for row in matrix: for i, value in enumerate(row): # Update the minimum value for each column column_minima[i] = min(column_minima[i], value) for i, minimum in enumerate(column_minima): print(f"Minimum value in column {i}: {minimum}")
輸出
Minimum value in column 0: 3 Minimum value in column 1: 2 Minimum value in column 2: 1 Minimum value in column 3: 7
方法 2:使用 NumPy
使用 NumPy 可以高效地處理矩陣:建立一個填充 NaN 值的陣列,然後用矩陣資料填充此陣列。隨後使用 np.nanmin 可以識別每列的最小值,從而證實 NumPy 在處理數值資料方面表現出色。
示例
import numpy as np matrix = [ [3, 8, 1], [4, 2], [9, 6, 5, 7] ] max_row_length = max(len(row) for row in matrix) # Create a NumPy array filled with NaN values np_matrix = np.empty((len(matrix), max_row_length)) np_matrix[:] = np.nan # Fill the NumPy array with matrix values for i, row in enumerate(matrix): np_matrix[i, :len(row)] = row # Find the minimum values in each column column_minima = np.nanmin(np_matrix, axis=0) # Print the minimum values for each column for i, minimum in enumerate(column_minima): print(f"Minimum value in column {i}: {int(minimum)}")
輸出
Minimum value in column 0: 3 Minimum value in column 1: 2 Minimum value in column 2: 1 Minimum value in column 3: 7
方法 3:使用列表推導式
使用列表推導式是確定每列最小值的一種巧妙方法:它迭代遍歷矩陣,為每一列生成一個最小值的列表。這種系統化的方法不僅簡化了可讀性,還提高了效率,因此使其成為一種最佳方法。
示例
matrix = [ [3, 8, 1], [4, 2], [9, 6, 5, 7] ] column_minima = [min(row[i] for row in matrix if i < len(row)) for i in range(max(len(row) for row in matrix))] for i, minimum in enumerate(column_minima): print(f"Minimum value in column {i}: {minimum}")
輸出
Minimum value in column 0: 3 Minimum value in column 1: 2 Minimum value in column 2: 1 Minimum value in column 3: 7
方法 4:使用 itertools.zip_longest
使用 Python 的 itertools 庫,此程式碼片段識別可變大小矩陣中每列的最小值:首先,它轉置該矩陣,使用 zip_longest 解包其行,從而確保所有列都具有相同的長度,方法是用 float('inf') 填充任何缺失的值。然後,它透過使用列表推導式計算每列的最小值。最後,程式遍歷生成的列最小值列表,並列印它們——此過程會產生一個輸出,該輸出顯示原始矩陣中每列的最小值。
示例
from itertools import zip_longest matrix = [ [3, 8, 1], [4, 2], [9, 6, 5, 7] ] # Transpose the matrix and use zip_longest transposed = zip_longest(*matrix, fillvalue=float('inf')) column_minima = [min(col) for col in transposed] for i, minimum in enumerate(column_minima): print(f"Minimum value in column {i}: {minimum}")
輸出
Minimum value in column 0: 3 Minimum value in column 1: 2 Minimum value in column 2: 1 Minimum value in column 3: 7
方法 5:使用自定義函式
我們建立一個自定義函式來查詢每列中的最小值;它透過迭代矩陣來執行,並在其過程中維護一個每列最小值的列表。此方法提供的靈活性和自定義選項值得注意:它們極大地提升了我們對資料管理的方法。
示例
def min_values_in_columns(matrix): column_minima = [float('inf')] * max(len(row) for row in matrix) for row in matrix: for i, value in enumerate(row): column_minima[i] = min(column_minima[i], value) return column_minima matrix = [ [3, 8, 1], [4, 2], [9, 6, 5, 7] ] column_minima = min_values_in_columns(matrix) for i, minimum in enumerate(column_minima): print(f"Minimum value in column {i}: {minimum}")
輸出
Minimum value in column 0: 3 Minimum value in column 1: 2 Minimum value in column 2: 1 Minimum value in column 3: 7
方法 6:使用 defaultdict
collections 模組的 defaultdict 簡化了查詢每列最小值的步驟:它迴圈遍歷矩陣,在其類似字典的配置中系統地更新每列的最小值。
示例
from collections import defaultdict matrix = [ [3, 8, 1], [4, 2], [9, 6, 5, 7] ] column_minima = defaultdict(lambda: float('inf')) for row in matrix: for i, value in enumerate(row): column_minima[i] = min(column_minima[i], value) for i, minimum in column_minima.items(): print(f"Minimum value in column {i}: {minimum}")
輸出
Minimum value in column 0: 3 Minimum value in column 1: 2 Minimum value in column 2: 1 Minimum value in column 3: 7
方法 7:使用 Pandas
Pandas - 這是一個用於資料操作的功能強大的庫。透過從矩陣建立 Pandas DataFrame,我們使用 min 函式來確定每列的最小值——Pandas 在處理結構化資料時尤其擅長此任務。
示例
import pandas as pd matrix = [ [3, 8, 1], [4, 2], [9, 6, 5, 7] ] df = pd.DataFrame(matrix) column_minima = df.min() for i, minimum in enumerate(column_minima): print(f"Minimum value in column {i}: {int(minimum)}")
輸出
Minimum value in column 0: 3 Minimum value in column 1: 2 Minimum value in column 2: 1 Minimum value in column 3: 7
結論
在我們探索各種查詢不等尺寸矩陣中每列最小值的方法,特別是使用 Python 時:我們遇到了各種策略,從簡單的巢狀迴圈和列表推導式到專門的工具,如 NumPy 和 Pandas。您選擇的方法應取決於兩個主要因素:您資料固有的獨特特徵;以及與您的任務相關的效能要求。優先考慮可讀性、數值效率或多功能性;每種方法都值得一試——一種可以巧妙地處理適合您需求的各種矩陣結構的方法。