*63*

Flattening an array in NumPy means converting a multi-dimensional array into a one-dimensional array.

This is commonly used when reshaping data, especially in machine learning, image processing, and data analysis, where you often need to format data into a single row or column.

In this tutorial, we will cover:

- Basic Flattening with flatten()
- Flattening with ravel()
- Using reshape() to Flatten Arrays
- Difference Between flatten() and ravel()
- Flattening Higher-Dimensional Arrays

Let’s go through each method with examples.

## 1. Basic Flattening with flatten()

The flatten() method in NumPy converts an array into a one-dimensional array.

It returns a new copy of the array in a flattened form.

### Example 1: Flattening a 2D Array

import numpy as np # Create a 2D array array_2d = np.array([[1, 2, 3], [4, 5, 6]]) # Flatten the 2D array flattened_array = array_2d.flatten() print("Flattened Array:\n", flattened_array)

Output:

Flattened Array: [1 2 3 4 5 6]

- Explanation: flatten() creates a new 1D array from the 2D array, copying the data in a row-major (C-style) order by default.

### Example 2: Flattening in Column-Major Order

You can specify the order in which to flatten: ‘C' (row-major), ‘F' (column-major), or ‘A' (depends on memory layout).

# Flatten in column-major (Fortran-style) order flattened_array_fortran = array_2d.flatten(order='F') print("\nFlattened Array (Column-Major Order):\n", flattened_array_fortran)

Output:

Flattened Array (Column-Major Order): [1 4 2 5 3 6]

- Explanation: With order='F', the array is flattened by columns, reading elements in a column-first order.

## 2. Flattening with ravel()

The ravel() function is similar to flatten(), but it returns a flattened view of the array if possible.

This means that ravel() often does not create a new array but instead provides a reference to the original array, making it more memory-efficient.

### Example 3: Flattening a 2D Array with ravel()

# Flatten the array with ravel raveled_array = array_2d.ravel() print("Raveled Array:\n", raveled_array)

Output:

Raveled Array: [1 2 3 4 5 6]

- Explanation: ravel() provides a 1D view of array_2d, which is generally more memory-efficient than flatten().

### Example 4: Column-Major Order with ravel()

# Flatten with column-major (Fortran-style) order raveled_array_fortran = array_2d.ravel(order='F') print("\nRaveled Array (Column-Major Order):\n", raveled_array_fortran)

Output:

Raveled Array (Column-Major Order): [1 4 2 5 3 6]

- Explanation: Like flatten(), ravel() also allows specifying order='F' to flatten the array by columns.

## 3. Using reshape() to Flatten Arrays

The reshape() function can also be used to flatten an array by setting its shape to (-1,), where -1 instructs NumPy to infer the dimension.

### Example 5: Flattening a 2D Array with reshape()

# Flatten the array using reshape reshaped_array = array_2d.reshape(-1) print("Flattened Array using reshape:\n", reshaped_array)

Output:

Flattened Array using reshape: [1 2 3 4 5 6]

- Explanation: reshape(-1) flattens the array into a 1D array by inferring the length of the dimension.

### Example 6: Column-Major Order with reshape()

# Flatten the array using reshape in column-major order reshaped_array_fortran = array_2d.reshape(-1, order='F') print("\nFlattened Array using reshape (Column-Major Order):\n", reshaped_array_fortran)

Output:

Flattened Array using reshape (Column-Major Order): [1 4 2 5 3 6]

- Explanation: reshape(-1, order='F') reshapes the array into a flattened 1D array in column-major order.

## 4. Difference Between flatten() and ravel()

While flatten() and ravel() may appear similar, there is an important difference between them:

- flatten() always returns a copy of the array, which means modifications to the flattened array do not affect the original array.
- ravel() returns a view of the array when possible, which is more memory-efficient. Modifying the output of ravel() may affect the original array.

### Example 7: Modifying a Flattened Array with flatten() and ravel()

# Modify the flattened copy with flatten flattened_copy = array_2d.flatten() flattened_copy[0] = 99 print("Original Array after flatten modification:\n", array_2d) # Modify the raveled view with ravel raveled_view = array_2d.ravel() raveled_view[0] = 99 print("\nOriginal Array after ravel modification:\n", array_2d)

Output:

Original Array after flatten modification: [[ 1 2 3] [ 4 5 6]] Original Array after ravel modification: [[99 2 3] [ 4 5 6]]

- Explanation: Changing flattened_copy (from flatten()) does not affect array_2d, while modifying raveled_view (from ravel()) changes the original array since ravel() returns a view when possible.

## 5. Flattening Higher-Dimensional Arrays

The same methods (flatten(), ravel(), and reshape()) can be used to flatten arrays of any dimensionality into a 1D array.

### Example 8: Flattening a 3D Array

# Create a 3D array array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) # Flatten the 3D array flattened_3d = array_3d.flatten() print("Flattened 3D Array:\n", flattened_3d)

Output:

Flattened 3D Array: [1 2 3 4 5 6 7 8]

### Example 9: Column-Major Order Flattening of a 3D Array

# Flatten the 3D array in column-major order flattened_3d_fortran = array_3d.flatten(order='F') print("\nFlattened 3D Array (Column-Major Order):\n", flattened_3d_fortran)

Output:

Flattened 3D Array (Column-Major Order): [1 5 3 7 2 6 4 8]

- Explanation: Flattening higher-dimensional arrays in column-major order changes the order in which elements are accessed and listed in the flattened array.

## Summary of Array Flattening Techniques in NumPy

Function | Description |
---|---|

flatten() | Returns a flattened copy of the array; by default, flattens in row-major order (order='C'). |

ravel() | Returns a flattened view of the array when possible; more memory-efficient than flatten(). |

reshape(-1) | Converts any array into a 1D array by inferring the dimension. |

Order (C vs F) | Specifies the flattening order: row-major (C), column-major (F), or automatic (A). |

## Conclusion

In this tutorial, we explored various ways to flatten arrays in NumPy, including:

- Flattening with flatten(), which returns a new flattened array.
- Flattening with ravel(), which returns a flattened view of the original array when possible.
- Flattening with reshape(), which converts an array to 1D with shape (-1,).
- Column-major order flattening to control the order of elements in the flattened array.