Skip to main content

How to Solve NumPy "TypeError: Field elements must be 2- or 3-tuples, got 1

The TypeError: Field elements must be 2- or 3-tuples, got... in NumPy arises primarily when attempting to create a structured NumPy array from improperly formatted data.

This guide focuses on how to correctly create NumPy arrays, especially 2D arrays and avoid this common TypeError.

Understanding the Error: Incorrect Array Creation

The error typically occurs when you try to pass multiple separate lists as arguments to numpy.array() instead of passing a single list containing the lists.

import numpy as np

# Incorrect: TypeError: Field elements must be 2- or 3-tuples, got '1'
try:
arr = np.array([2, 4, 6], [1, 3, 5])
except TypeError as e:
print(e)

Output:

Field elements must be 2- or 3-tuples, got '1'

This error happens because NumPy interprets each list as a field name and each element within the list as field information for constructing structured arrays, which isn't what you wanted in this case.

Creating a 2D NumPy Array Correctly

To fix this, pass a single list of lists to numpy.array().

From a List of Lists

This is the most common way to create a 2D NumPy array:

import numpy as np

arr = np.array([[2, 4, 6], [1, 3, 5]])
print(arr)

Output:

[[2 4 6]
[1 3 5]]
note

The key is to have a single set of square brackets [] enclosing the entire structure.

From a Tuple of Lists

You can also use a tuple to store the sublists:

import numpy as np

arr = np.array(([2, 4, 6], [1, 3, 5]))
print(arr)

Output:

[[2 4 6]
[1 3 5]]

Creating a 1D NumPy Array

To create a one-dimensional array, you have to wrap all of the values in one single set of square brackets:

import numpy as np

arr = np.array([1, 3, 5, 7, 9, 11])
print(arr)

Output:

[ 1  3  5  7  9 11]

Specifying Data Types (dtype)

The numpy.array() function can take dtype as an argument, which will control the datatype of the items, for example using dtype=float will set the data type to float.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=float)

print(arr)
print(arr.dtype)

Output:

[[1. 2. 3.]
[4. 5. 6.]]
float64

Conclusion

The TypeError: Field elements must be 2- or 3-tuples, got... error arises when you incorrectly structure the input to numpy.array().

To solve this, ensure you pass a single list (or tuple) containing your rows (which are also lists or tuples).

Pay attention to the use of brackets, and use dtype to set the desired data type.