## Issue

I have such Python code:

```
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.int(x)
x = np.arange(1, 15.1, 0.1)
plt.plot(x, f(x))
plt.show()
```

And such error:

```
TypeError: only length-1 arrays can be converted to Python scalars
```

How can I fix it?

## Solution

The error "only length-1 arrays can be converted to Python scalars" is raised when the function expects a single value but you pass an array instead.

If you look at the call signature of `np.int`

, you’ll see that it accepts a single value, not an array. In general, if you want to apply a function that accepts a single element to every element in an array, you can use `np.vectorize`

:

```
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.int(x)
f2 = np.vectorize(f)
x = np.arange(1, 15.1, 0.1)
plt.plot(x, f2(x))
plt.show()
```

You can skip the definition of f(x) and just pass np.int to the vectorize function: `f2 = np.vectorize(np.int)`

.

Note that `np.vectorize`

is just a convenience function and basically a for loop. That will be inefficient over large arrays. Whenever you have the possibility, use truly vectorized functions or methods (like `astype(int)`

as @FFT suggests).

Answered By – ayhan

Answer Checked By – Cary Denson (BugsFixing Admin)