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
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).
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).