Python - Uneven Sized Matrix Column Minimum

In Python, when dealing with matrices of uneven row lengths, finding the minimum values in each column requires special handling. This article explores seven different methods to tackle this problem, from basic loops to advanced libraries like NumPy and Pandas.

You'll learn how to handle uneven-sized matrices and extract column-wise minimum values efficiently using various approaches.

Using Nested Loops

This method iterates through the matrix using nested loops and tracks the minimum value for each column. It's straightforward but may be slower for large datasets ?

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):
        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

Using NumPy

NumPy provides efficient array operations. Create an array filled with NaN values, populate it with matrix data, then use np.nanmin() to find column minimums ?

import numpy as np

matrix = [
    [3, 8, 1],
    [4, 2],
    [9, 6, 5, 7]
]

max_row_length = max(len(row) for row in matrix)
np_matrix = np.empty((len(matrix), max_row_length))
np_matrix[:] = np.nan

for i, row in enumerate(matrix):
    np_matrix[i, :len(row)] = row

column_minima = np.nanmin(np_matrix, axis=0)

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

Using List Comprehension

List comprehension provides a concise way to find column minimums by iterating through each column index and finding the minimum from available values ?

matrix = [
    [3, 8, 1],
    [4, 2],
    [9, 6, 5, 7]
]

max_columns = max(len(row) for row in matrix)
column_minima = [min(row[i] for row in matrix if i < len(row)) 
                for i in range(max_columns)]

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

Using itertools.zip_longest

The zip_longest function transposes the matrix by filling missing values with float('inf'), making it easy to find column minimums ?

from itertools import zip_longest

matrix = [
    [3, 8, 1],
    [4, 2],
    [9, 6, 5, 7]
]

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

Using a Custom Function

Creating a reusable function encapsulates the logic and provides flexibility for different matrix operations ?

def find_column_minimums(matrix):
    max_columns = max(len(row) for row in matrix)
    column_minima = [float('inf')] * max_columns
    
    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 = find_column_minimums(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

Using defaultdict

The defaultdict from the collections module automatically handles missing keys, simplifying the column minimum tracking ?

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 in sorted(column_minima.keys()):
    print(f"Minimum value in column {i}: {column_minima[i]}")
Minimum value in column 0: 3
Minimum value in column 1: 2
Minimum value in column 2: 1
Minimum value in column 3: 7

Using Pandas

Pandas DataFrame automatically handles uneven data and provides built-in methods for statistical operations like finding minimums ?

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):
    if pd.notna(minimum):
        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

Comparison

Method Best For Performance Readability
Nested Loops Simple cases Moderate High
NumPy Numerical data High Moderate
List Comprehension Pythonic code Moderate High
zip_longest Clean transpose Moderate High
Pandas Data analysis High High

Conclusion

Each method has its strengths: use nested loops for simplicity, NumPy for numerical performance, or Pandas for data analysis tasks. Choose based on your specific requirements for readability, performance, and data handling needs.

Updated on: 2026-03-27T15:57:27+05:30

255 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements