TypeError: only length-1 arrays can be converted to Python scalars while plot showing

后端 未结 3 1178
天涯浪人
天涯浪人 2020-11-27 15:55

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


        
3条回答
  •  佛祖请我去吃肉
    2020-11-27 16:42

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

提交回复
热议问题