【问题标题】:Reason of ValueError: negative dimensions are not allowed?ValueError 的原因:不允许使用负尺寸?
【发布时间】:2017-06-13 09:51:21
【问题描述】:

我一直在尝试绘制下面定义的函数的输出,但无法获得输出。我尝试了几件事,但每次都会遇到不同的错误。如果有人可以帮助我解决我做错了什么,我将不胜感激。

import matplotlib.pyplot as plt
%matplotlib inline
import math
import sympy as sym
x = sym.symbols('x',positive = True)
lambd = 4
a= 3
def f(x):
    return lambd**a * x**(a-1) * sym.exp(-lambd*x) / math.factorial(a-1)
x1 = np.linspace(0,1,10)
plt.plot(x1,f(x1))

如果我将x1 更改为np.linspace(0,1,100),则错误为
"ValueError: sequence too large; cannot be greater than 32"

这可能是什么原因?对此的一些指导将不胜感激。

【问题讨论】:

    标签: python-3.x matplotlib


    【解决方案1】:

    您将一个 numpy 数组 x1 传递给函数 f。问题是在这个函数中你有sympy.exp(),它不明白如何处理数组,因为它只适用于符号和数字。

    最简单的方法是改用numpy.exp

    import matplotlib.pyplot as plt
    import numpy as np
    import math
    
    lambd = 4
    a= 3
    
    def f(x):
        return lambd**a * x**(a-1) * np.exp(-lambd*x) / math.factorial(a-1)
    
    x1 = np.linspace(0,1,10)
    plt.plot(x1,f(x1))
    
    plt.show()
    

    如果出于某种原因,您需要使用仅适用于单个数字而不适用于数组的函数,则可以使用 numpy.vectorize 将该函数转换为按元素计算输入数组的函数。

    import matplotlib.pyplot as plt
    import sympy as sym
    import numpy as np
    import math
    
    lambd = 4
    a= 3
    
    def f(x):
        return lambd**a * x**(a-1) * sym.exp(-lambd*x) / math.factorial(a-1)
    
    fv = np.vectorize(f)
    
    x1 = np.linspace(0,1,10)
    plt.plot(x1,fv(x1))
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2013-11-25
      • 1970-01-01
      • 2023-02-26
      • 2020-01-18
      • 2020-10-08
      • 2016-04-25
      • 1970-01-01
      • 2020-05-04
      • 2017-04-29
      相关资源
      最近更新 更多