# Only size-1 or length-1 arrays can be converted to python scalars : Fix it Only size-1 or length-1 arrays can be converted to Python scalars TypeError occurs when we pass an array in the place of single values like int, float, etc in any function as a parameter. This is a very generic python type error but the majority of developers face this error while working with Matplotlib, Numpy library.

## Only size-1 arrays can be converted to Python scalars : (Solution ) –

Before I provide you with the solution, Let’s understand the root cause for this error.

### Root cause –

The root cause is passing arrays in place of scalers. Now let’s understand what is scaler. It’s really simple as int, float, etc which consists of the magnitude of one element is scaler. For example, 1o is a scalar of type int. The float value 10.2 is a scalar. On the opposite side, the array contains multiple elements of a similar type-together. For example [1,2,3,4] is an array of int type. If you consider this error, you will get the developer to get the same while code in multiple contexts but the root cause will always be the same.

#### examples –

Hope this small implementation is enough to understand the root cause for this error. Now let’s see some business context where we can get this error.

### Solution 1 : Using vectorize() function –

This vectorize() function create single value from NumPy array. Let’s understand with one example.

``````import numpy as np
import matplotlib.pyplot as plt
def custom_function(x):
return np.int(x)
arr1= np.arange(1, 10, 0.5)
plt.plot(arr1, custom_function(arr1))
plt.show()`````` Now if use vectorize() function we can convert the NumPy array into a singular scaler function. Let’s see with the implementation. Execute the below lines of code.

``````import numpy as np
import matplotlib.pyplot as plt
def custom_function(x):
return np.int(x)
arr1= np.arange(1, 10, 0.5)
converger = np.vectorize(custom_function)
plt.plot(arr1, converger(arr1))
plt.show()``````

Let’s see the screenshot.

As you can see that we use vectorize() function. And It converged the NumPy array into a singular value and that’s fix the error we were getting.

### Solution 2 : Use astype(int) –

The astype() function works on the same principles. It will also converge the numpy array into a singular value and that will fix the issue.

``````import numpy as np
import matplotlib.pyplot as plt
def custom_function(x):
return x.astype(int)
arr1= np.arange(1, 10, 0.5)
plt.plot(arr1, custom_function(arr1))
plt.show()``````

Here is the output for this-

### Solution 3 : map() function –

See map function does what, It consumes two parameters. The first parameter is the function that is going to be applied in each data point or sequence. The second parameter is the sequence of data on which this first parameter will apply. In our context, here is the syntax and then the full code.

``np.array(list(map(np.int, x)))``

### Solution 4 : apply_along_axis() –

The apply_along_axis() function also converge NumPy error into scaler function.  Here is the example for this-

``````obj = lambda y: [np.int(i) for i in y]
np.apply_along_axis(obj, 0, x)``````

### Solution 5: Custom logic using a loop for conversion into scaler value –

One of the easiest ways using loop we can converge multi-value into scaler one.

``````y = np.array([None]*len(arr1))
for i in range(len(arr1)):
y[i] = np.int(x[i])``````

Firstly we create an empty array with equivalent size and then we will copy the element by operating np.int() function on top of it.

Generally, typerror always comes when you are passing a different datatype of the variable. Here We have covered multiple ways to fix this error but if you need to add more please comment us. You can also contact us for more help.

Thanks

Data Science Learner Team 