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。您选择的方法应取决于两个主要因素:您数据固有的独特特征;以及与您的任务相关的性能要求。优先考虑可读性、数值效率或多功能性;每种方法都值得一试——一种可以巧妙地处理适合您需求的各种矩阵结构的方法。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP