python - 将此函数绘制为累积分布
问题描述
我正在尝试在 Python 中创建以下函数的累积分布图,从 -infinity 到 infinity:
最初我尝试了我在网上找到的这段代码,它似乎适用于诸如 x**2 之类的函数:
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
plt.plot(x, y)
plt.show()
#graph('(4/5)*(((x**4)/4)+x)', range(-100, 100))
graph('x**2', range(-100, 100))
问题是我不确定如何翻译此代码以将函数的其他条件考虑到此图中(即,如果 x <= 0,则为 0,如果 x>=1,则为 0)。如果无法修改此代码以考虑这两个条件,那么还有其他关于可以执行此操作的代码的建议吗?
解决方案
您可以将您的条件用作掩码,然后使用 NumPy 数组索引将 y 的值分配给您想要的区域为 0。
几个变化:
- 我曾经
linspace
有一个精细的网格,以便在x=0
和之间包含更多数据点x=1
。您使用的range
生成整数,因此您基本上将在 0 和 1 之间有一条直线。 y[(x<=0) | (x>=1)] = 0
是这里的关键。|
运算符合并这两个条件并(x<=0) | (x>=1)
从 x 数组中返回该条件成立的索引True
。然后将这些索引用作 y 数组的输入,然后将这些值分配给 0。
我将 x 限制限制为 -1.5 到 1.5,以突出显示有趣的区域。
x^2 案例的完整答案
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
y[(x<=0) | (x>=1)] = 0
plt.plot(x, y)
plt.xlim(-1.5,1.5)
plt.show()
graph('x**2', np.linspace(-100, 100, 10000))
绘制你的实际方程
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
y[(x<=0) | (x>=1)] = 0
plt.plot(x, y)
plt.xlim(-1.5,1.5)
plt.show()
graph('(4/5)*(((x**4)/4)+x)', np.linspace(-100, 100, 10000))
推荐阅读
- python - Kivy 错误:[CRITICAL] [App] 无法获取窗口,中止
- python - 设置为 numpy 数组切片时,如何禁用改变大小的广播?
- kubernetes - Helm test fails with ERROR: watch closed before UntilWithoutRetry timeout
- javascript - 不知道如何实现范围到 amcharts
- django - dynamic URL routing in django displaying 'item' on each url
- visual-studio-code - Glob syntax documentation
- mysql - how to make bidding table structure for different type of users
- linux - 使用公共 SSH 密钥连接到 localhost 失败
- node.js - 调用第三方 API 给我错误:301 Moved Permanently
- php - 致命错误:未捕获的错误:找不到类“App\Config”