Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x ValueError原因:不允许负维度?_Python 3.x_Matplotlib - Fatal编程技术网

Python 3.x ValueError原因:不允许负维度?

Python 3.x ValueError原因:不允许负维度?,python-3.x,matplotlib,Python 3.x,Matplotlib,我一直在尝试绘制下面定义的函数的输出,但无法获得输出。我尝试了几种方法,但每次都会出现不同的错误。如果有人能帮助我做错事,我将不胜感激 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.

我一直在尝试绘制下面定义的函数的输出,但无法获得输出。我尝试了几种方法,但每次都会出现不同的错误。如果有人能帮助我做错事,我将不胜感激

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,1100)
,则错误为
“ValueError:序列太大;不能大于32”


原因是什么?在此方面的一些指导将受到高度赞赏

您正在将numpy数组
x1
传递给函数
f
。问题是,在这个函数中有
symphy.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()

您正在将numpy数组
x1
传递给函数
f
。问题是,在这个函数中有
symphy.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()