使用 np.linspace() 绘制离散分布

2023-11-30

我正在尝试使用 matplotlib 绘制一个简单的离散分布:

  • 如果-1
  • 如果0
  • 如果 1

我该如何开始x = np.linspace(-1, 2)?

到目前为止我尝试过的是:

def mapDiscProb(x):
    if np.any(x < 0):
        return 0.3 + x * 0
    elif np.any(x >= 1):
        return 0.2 + x * 0
    else:
        return 0.5 + x * 0

x = np.linspace(-1, 2)
y = mapDiscProb(x4)

ax.plot(x, y, clip_on = False)

结果只是从 -1 到 2 的 0.3 整条线,就好像elifelse没有被执行。

我的预期输出是三个断开的水平线,这是离散 pmf 的标准。


您可以使用

numpy.piecewise

numpy.piecewise允许根据某些条件定义函数。这里你有三个条件[x<0, x>=1, (x>=0) & (x<1)],并且您可以定义一个函数来用于每个函数。

import matplotlib.pyplot as plt
import numpy as np

l1 = lambda x: 0.3 + x * 0
l2 = lambda x: 0.2 + x * 0
l3 = lambda x: 0.5 + x * 0

mapDiscProb=lambda x: np.piecewise(x, [x<0, x>=1, (x>=0) & (x<1)],[l1,l2,l3])

x = np.linspace(-1, 2)
y = mapDiscProb(x)

fig, ax = plt.subplots()
ax.plot(x, y, clip_on = False)

plt.show()

numpy.vectorize

numpy.vectorize矢量化一个要使用标量调用的函数,以便对数组中的每个元素进行评估。这允许if/else按预期使用的语句。

import matplotlib.pyplot as plt
import numpy as np

def mapDiscProb(x):
    if x < 0:
        return 0.3
    elif x >= 1:
        return 0.2
    else:
        return 0.5

x = np.linspace(-1, 2)
y = np.vectorize(mapDiscProb)(x)

fig, ax = plt.subplots()
ax.plot(x, y, clip_on = False)

plt.show()

numpy.select

(这个想法归功于 PaulH)numpy.select可以根据条件从不同的数组中选择值。对于分段常数函数,这是一个简单的工具,因为它不需要构建任何附加函数(单行)。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 2)
y = np.select([x<0, x<1, x>1], [0.3, 0.5, 0.2])

fig, ax = plt.subplots()
ax.plot(x, y, clip_on = False)

plt.show()

所有情况下的输出:

enter image description here

无垂直线

如果您不希望出现任何垂直线,则根据条件绘制尽可能多的图是有意义的。

import matplotlib.pyplot as plt
import numpy as np

l1 = lambda x: 0.3 + x * 0
l2 = lambda x: 0.2 + x * 0
l3 = lambda x: 0.5 + x * 0

x = np.linspace(-1, 2)
func = [l1,l2,l3]
cond = [x<0, x>=1, (x>=0) & (x<1)]

fig, ax = plt.subplots()
for f,c in zip(func,cond):
    xi = x[c]
    ax.plot(xi, f(xi), color="C0")

plt.show()

enter image description here

或者,使用numpy.select,您可以修改x数组肯定包含值[0,1],位于条件之间的边缘。选择明确排除这些值的条件,[x<0, (x>0) & (x<1), x>1](注意缺少任何等号)将允许将这些值设置为 nan。未显示 Nan 值,因此出现间隙。

import matplotlib.pyplot as plt
import numpy as np

x = np.sort(np.append(np.linspace(-1, 2),[0,1]))
y = np.select([x<0, (x>0) & (x<1), x>1], [0.3, 0.5, 0.2], np.nan)

fig, ax = plt.subplots()
ax.plot(x, y)

plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 np.linspace() 绘制离散分布 的相关文章

随机推荐

  • iDevice for Dummies:一台设备可以分配多个配置(个人/企业)吗? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 是否可以为一个 iDevice 分配多个规定 老实说
  • 触发器从另一个表更新总和 MySQL

    我有一个数据库 用于跟踪我所在联赛的统计数据和平均值 我有一个结果表和一个排名表 我将结果中的 分数 添加到排名中的总体 分数 中 我目前有一个查询 它成功地将结果中的分数添加到积分表中 但是 当我添加新结果时 排名不会更新 这是我的查询
  • C / C++ / C#:如何执行“mount -a”

    问题 在 C C C 中 我需要 C 但 C 和 C 也可以 如何在 Linux 上执行 mount a 我的意思是 以编程方式 without开始一个像这样的过程 system mount a Edit 注意 a 我的问题实际上不是关于如
  • Express.JS:将 cookie 附加到静态提供的内容

    我使用 Express JS 来提供静态内容 express use express static When index html服务完成后 我想在响应旁边发送一个 cookie 指示用户是否已登录 通常应该使用res cookie 但我不
  • 如何将厨师食谱中的一种资源的价值传递到另一种资源?

    我正在尝试更改一个资源中的属性 并希望在另一资源中使用更新后的值 但更新后的值未反映在另一资源中 请帮我 Code node oracle asm disks each key do disk Chef Log info I am in c
  • 如何从命令行将参数传递给 Makefile?

    如何从命令行将参数传递给 Makefile 我明白我能做到 make action VAR value value with Makefile VAR default action echo VAR 我如何获得以下行为 make actio
  • 带 SVG 终端的 Gnuplot 4.7 超链接和超文本

    我正在 Gnuplot 4 7 中使用 SVG 终端 并尝试在浏览器上同时使用超文本和超链接 分别通过鼠标悬停和鼠标单击绘制的数据点来激活 鼠标悬停的工作原理要感谢 stackoverflow 对我上一个问题的帮助 我的数据输入文件如下所示
  • JComponent 和 ComponentUI 委托之间的绑定事件

    我已经开始尝试创建普通的 MVC Swing 组件 我对M和C没有任何问题 但是V向我抛出了一个我通常无法解决的问题 问题是 Controller 是组件的主类 例如 MyComponent 并且它扩展了 JComponent View 是
  • 使用Nutch爬取指定URL列表

    我有一百万个 URL 列表需要获取 我使用这个列表作为坚果种子并使用基本的crawl命令 Nutch 去取它们 但是 我发现 Nutch 会自动获取不在列表中的 URL 我确实将爬网参数设置为 深度1 topN 1000000 但它不起作用
  • 创建 Java 程序来搜索文件中的特定单词

    我刚刚学习该语言 想知道更有经验的 Java 程序员在以下情况下会做什么 我想创建一个java程序 它将搜索指定文件中特定单词的所有实例 你会如何处理这个问题 Java API 是否附带一个提供文件扫描功能的类 或者我是否必须编写自己的类来
  • 注册以支持 iOS 应用程序的图像文件

    您好 我想注册以支持我的应用程序中的图像文件 因此 当用户点击 iPhone 照片应用程序中的操作按钮时 我的应用程序图标将显示在 打开方式 菜单中 我的 info plist 中有以下内容
  • 在 LINQ 中选择计数

    我有一个包含列的 SQL Server 表ResolvedDate and ResolvedBy 现在我想选择这两列并计算它们的结果 我想我会这样实现 dataContext Activities Where a gt a IsResolv
  • 比较 Haskell 与 C# 的类型系统,寻找类似物

    我对 Haskell 编程还很陌生 我正在尝试处理它的类 数据 实例和新类型 这是我的理解 data NewData Constr1 Int Int Constr2 String Float 与 Java 或 C 大致相同 class Ne
  • AngularJS 与 MVC 6

    这是一MVC 6 WebApi应用 我正在尝试在后端使用 WebApi 在前端使用 AngularJS 我有两个静态文件 index html 和 login html 最终将会有更多的静态文件 我的 Angular 应用程序包含在inde
  • Quickfix 无法读取重复组

    我在 Windows 中使用 Quickfix 和 python 绑定 我过去曾能够提出市场数据请求 我最近更换了不同的 API 提供商 Cunningham 又名 CTS 并且遇到了很多问题 然而 至少其中之一似乎是 Quickfix 内
  • 在 APL 中创建单位矩阵最惯用的方法

    根据罗塞塔代码 在 APL 中有两种创建单位矩阵的惯用方法 1 ID 2 ID 1 0 2 如何运作 为什么这比 1 更好 后者使用 APL 中惯用的方法外积 1 0创建一个向量 其中包含1其次是 零 所以 这个向量的长度是 1 涵盖 by
  • 如何克隆微软图表控件?

    克隆 Microsoft Chart Control 对象的推荐方法是什么 因为是第三方库 所以无法使用解决方案这里提到因为我无法将对象标记为可序列化 最好 我不想引入任何第三方控件来克隆图表 除非如果没有第三方控件绝对不可能这样做 您不需
  • 将 Fetch API 与 Promise.all 一起使用

    我的目标是从两个 URL 获取数据 并仅在两个 URL 均成功返回时才执行操作 另一方面 如果其中任何一个失败 我想返回错误 我已经尝试了我的代码并设法获得了预期的效果 我的问题是 是否有更有效 更简洁的方法来实现相同的功能 辅助函数 le
  • Fparsec 递归语法抛出 StackOverflowException

    我有这个代码 type Exprs Val of float Mult of Exprs Exprs Plus of Exprs Exprs let pexpr exprRef createParserForwardedToRef
  • 使用 np.linspace() 绘制离散分布

    我正在尝试使用 matplotlib 绘制一个简单的离散分布 如果 1 如果0 如果 1 我该如何开始x np linspace 1 2 到目前为止我尝试过的是 def mapDiscProb x if np any x lt 0 retu