Yandex

Course IndexCourse Index0

    ProgramGuru

    Adding and Removing Dimensions in NumPy Arrays


    Introduction

    In NumPy, manipulating the dimensionality of arrays unlocks powerful ways to reshape and adapt data for machine learning models, matrix operations, and broadcasting. Whether you're expanding a 1D array into a column or flattening an array for simplified computations, knowing how to add or remove dimensions is essential.

    Why Adjust Array Dimensions?

    Sometimes, your data comes in a shape that's not compatible with operations like matrix multiplication, broadcasting, or stacking. That’s when we need to intentionally add or remove dimensions to make our data shape-ready.

    Adding Dimensions: The Right Way

    There are two intuitive methods to increase the dimensions of an array:

    1. Using np.newaxis

    This is a special keyword that allows you to insert a new axis (i.e., dimension) at a specific position.

    import numpy as np
    
    arr = np.array([10, 20, 30])
    print(arr.shape)  # (3,)
    
    # Add a new axis to make it a 2D column vector
    col_vector = arr[:, np.newaxis]
    print(col_vector)
    print(col_vector.shape)  # (3, 1)

    Explanation:

    The original array is 1D with shape (3,). By using np.newaxis, we inserted a new axis at position 1 (after the row), turning it into a column vector with shape (3, 1).

    2. Using np.expand_dims()

    This method is more readable in codebases and works similarly to np.newaxis.

    row_vector = np.expand_dims(arr, axis=0)
    print(row_vector)
    print(row_vector.shape)  # (1, 3)

    Explanation:

    np.expand_dims adds a new dimension at the specified axis. Here, axis=0 means we are converting the 1D array into a 2D row vector.

    Removing Dimensions: Flatten It Out

    Sometimes, arrays have extra dimensions that we don’t need—like when you load grayscale image data that returns shape (28, 28, 1). To remove such dimensions, use:

    1. Using np.squeeze()

    arr_3d = np.array([[[5], [10], [15]]])  # Shape: (1, 3, 1)
    print(arr_3d.shape)
    
    squeezed = np.squeeze(arr_3d)
    print(squeezed)
    print(squeezed.shape)  # (3,)

    Explanation:

    np.squeeze removes all axes with size 1. It’s perfect when you want to collapse unnecessary singleton dimensions in a structured array.

    Be Careful With Squeeze

    If you accidentally squeeze an axis you need later, it might break broadcasting. If you want to remove a specific axis, use:

    np.squeeze(arr_3d, axis=0)  # Only removes axis 0 if it has size 1

    Real-Life Use Case

    When preparing data for machine learning, especially in libraries like TensorFlow or PyTorch, it’s common to expand dimensions to fit batch processing or flatten arrays before feeding them into dense layers.

    Checklist for Dimensional Manipulation

    • Use np.newaxis or expand_dims to reshape 1D to 2D.
    • Use squeeze only when you're sure the axis size is 1.
    • Always verify shapes using array.shape after modification.
    • Avoid reshaping blindly—check if it's consistent with your downstream operations.

    Verification Tips

    After any dimensional operation, always check:

    print(arr.shape)
    print(arr.ndim)

    This helps confirm the array’s dimensional integrity before applying any further computations.

    Summary

    Whether you're building machine learning pipelines, processing image data, or preparing matrices, mastering how to add and remove dimensions will make your NumPy workflow more flexible and powerful.

    These tools aren't just conveniences—they’re fundamentals. With just a few lines, you unlock shapes that seamlessly fit into the broader universe of numerical computing.



    Welcome to ProgramGuru

    Sign up to start your journey with us

    Support ProgramGuru.org

    You can support this website with a contribution of your choice.

    When making a contribution, mention your name, and programguru.org in the message. Your name shall be displayed in the sponsors list.

    PayPal

    UPI

    PhonePe QR

    MALLIKARJUNA M