In Python, you can use the numpy library when working with arrays and certain math concepts like matrices and linear algebra.

But like every other aspect of learning and working with a programming language, errors are unavoidable.

In this article, you'll learn how to fix the "TypeError: only size-1 arrays can be converted to Python scalars" error which mostly occurs when using the numpy library.

What Causes the TypeError: only size-1 arrays can be converted to Python scalars Error in Python?

The "TypeError: only size-1 arrays can be converted to Python scalars" error is raised when we pass in an array to a method that accepts only one parameter.

Here's an example:

import numpy as np

y = np.array([1, 2, 3, 4])
x = np.int(y)

print(x)

# TypeError: only size-1 arrays can be converted to Python scalars

The code above throws the "TypeError: only size-1 arrays can be converted to Python scalars" error because we passed the y array to the NumPy int() method. The method can only accept one parameter.

In the next section, you'll see some solutions for this error.

How to Fix the TypeError: only size-1 arrays can be converted to Python scalars Error in Python

There are two general solutions for fixing the "TypeError: only size-1 arrays can be converted to Python scalars" error.

Solution #1 – Using the np.vectorize() Function

The np.vectorize() function can accept a sequence/an array as its parameter. When printed out, it returns an array.

Here's an example:

import numpy as np

vector = np.vectorize(np.int_)
y = np.array([2, 4, 6, 8])
x = vector(y)

print(x)
# [2, 4, 6, 8]

In the example above, we created a vector variable which will "vectorize" any parameter passed to it: np.vectorize(np.int_).

We then created an array and stored it in the y variable: np.array([2, 4, 6, 8]).

Using the vector variable we created initially, we passed the y array as a parameter: x = vector(y).

When printed out, we got the array — [2, 4, 6, 8].

Solution #2 – Using the map() Function

The map() function accepts two parameter in this case — the NumPy method and the array.

import numpy as np

y = np.array([2, 4, 6, 8])
x = np.array(list(map(np.int_, y)))

print(x)
# [2, 4, 6, 8]

In the example above, we nested the map() function in a list() method so that we get the array retuned as a list and not a map object.

Solution #3 – Using the astype() Method

We can use the astype() method to convert a NumPy array to integers. This will prevent the "TypeError: only size-1 arrays can be converted to Python scalars" error from being raised.

Here's how:

import numpy as np

vector = np.vectorize(np.int_)
y = np.array([2, 4, 6, 8])
x = y.astype(int)

print(x)
# [2 4 6 8]

Summary

In this article, we talked about the "TypeError: only size-1 arrays can be converted to Python scalars" error in Python.

It is raised when we pass an array as a parameter to a numpy method that accepts only one parameter.

To fix the error, we used different methods like the np.vectorize() function, map() function, and astype() method.

Happy coding!