我该如何解决?只有大小为 1 的数组可以转换为 Python 标量
How should I fix it? Only size-1 arrays can be converted to Python scalars
我正在制作以下图表:
import matplotlib.pyplot as plt
import numpy as np
import math
def g(x):
return np.exp(-10)*pow(10,x)/math.factorial(x)
x=np.linspace(0,100,100)
plt.plot(x,g(x))
plt.show()
我在取阶乘的时候出错了。当 运行 代码抛出以下错误时:
TypeError: only size-1 arrays can be converted to Python scalars
我该如何解决?
谢谢。
不能在 numpy 数组上调用数学函数,只能在 numpy 标量上调用。要计算数组的 element-wise 阶乘,需要 scipy.special.factorial
。
如评论中所述,np.linspace(0, 100, 100)
不是整数。您需要 np.linspace(0, 100, 101)
来获取从 0 到 100 的整数。由于 scipy.special.factorial
依赖于伽玛函数,因此 non-integers 不一定是问题。但是请注意,这些类型的值不是很精确。
要显示曲线,您可能需要使用对数刻度:
import matplotlib.pyplot as plt
import numpy as np
import scipy.special
def g(x):
return np.exp(-10) * pow(10, x) / scipy.special.factorial(x)
x = np.linspace(0, 100, 100)
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 4))
ax1.plot(x, g(x))
ax1.set_title('linear plot')
ax2.plot(x, g(x))
ax2.set_yscale('log')
ax2.set_title('log plot')
plt.show()
我已经修复了 from scipy.special import factorial
的错误
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import factorial
def g(x):
return np.exp(-10)*pow(10,x)/factorial(x)
x=np.linspace(0,100)
plt.plot(x,g(x))
plt.show()
不需要斯特林近似。谢谢。
我正在制作以下图表:
import matplotlib.pyplot as plt
import numpy as np
import math
def g(x):
return np.exp(-10)*pow(10,x)/math.factorial(x)
x=np.linspace(0,100,100)
plt.plot(x,g(x))
plt.show()
我在取阶乘的时候出错了。当 运行 代码抛出以下错误时:
TypeError: only size-1 arrays can be converted to Python scalars
我该如何解决? 谢谢。
不能在 numpy 数组上调用数学函数,只能在 numpy 标量上调用。要计算数组的 element-wise 阶乘,需要 scipy.special.factorial
。
如评论中所述,np.linspace(0, 100, 100)
不是整数。您需要 np.linspace(0, 100, 101)
来获取从 0 到 100 的整数。由于 scipy.special.factorial
依赖于伽玛函数,因此 non-integers 不一定是问题。但是请注意,这些类型的值不是很精确。
要显示曲线,您可能需要使用对数刻度:
import matplotlib.pyplot as plt
import numpy as np
import scipy.special
def g(x):
return np.exp(-10) * pow(10, x) / scipy.special.factorial(x)
x = np.linspace(0, 100, 100)
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 4))
ax1.plot(x, g(x))
ax1.set_title('linear plot')
ax2.plot(x, g(x))
ax2.set_yscale('log')
ax2.set_title('log plot')
plt.show()
我已经修复了 from scipy.special import factorial
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import factorial
def g(x):
return np.exp(-10)*pow(10,x)/factorial(x)
x=np.linspace(0,100)
plt.plot(x,g(x))
plt.show()
不需要斯特林近似。谢谢。