NumPy ndarray.setflags()

The numpy.ndarray.setflags() method is used to modify the memory layout flags of a NumPy array. This method allows setting the writability, alignment, and update-if-copy properties of an array.

Syntax

</>
Copy
ndarray.setflags(write=None, align=None, uic=None)

Parameters

ParameterTypeDescription
writebool, optionalSpecifies whether the array can be modified. If False, the array becomes read-only.
alignbool, optionalSpecifies whether the memory alignment should be checked. Setting it to True ensures proper alignment.
uicbool, optionalControls the “update if copy” behavior, which is rarely used and primarily meant for internal operations.

Return Value

The method does not return anything (None), but it modifies the array’s flags in place.


Examples

1. Making an Array Read-Only

This example demonstrates how to make a NumPy array read-only using the write=False parameter.

</>
Copy
import numpy as np

# Creating a NumPy array
arr = np.array([1, 2, 3, 4])

# Setting the array as read-only
arr.setflags(write=False)

# Attempting to modify the array (this will raise an error)
try:
    arr[0] = 10
except ValueError as e:
    print("Error:", e)

Output:

Error: assignment destination is read-only

Since the write flag is set to False, the array cannot be modified, and attempting to change its values results in an error.

2. Allowing Modifications to a Read-Only Array

This example shows how to revert a read-only array back to a writable state.

</>
Copy
import numpy as np

# Creating a NumPy array and making it read-only
arr = np.array([10, 20, 30, 40])
arr.setflags(write=False)

# Changing the flag back to writable
arr.setflags(write=True)

# Modifying the array (this will now work)
arr[0] = 99
print(arr)

Output:

[99 20 30 40]

After resetting the write flag to True, the array becomes writable again, allowing modifications.

3. Checking and Modifying Memory Alignment

Here, we check and modify the memory alignment flag of an array using align=True.

</>
Copy
import numpy as np

# Creating an array
arr = np.array([5, 10, 15, 20])

# Checking initial alignment flag
print("Initial ALIGNED flag:", arr.flags.aligned)

# Trying to set alignment flag (only applicable in specific low-level cases)
arr.setflags(align=True)

# Checking if the flag is still aligned (this usually remains unchanged)
print("ALIGNED flag after modification:", arr.flags.aligned)

Output:

Initial ALIGNED flag: True
ALIGNED flag after modification: True

The align flag is typically True for properly allocated arrays. If the memory layout is already aligned, setting it explicitly does not change anything.