samplitude(s8e)是一个统计分布命令行工具

samplitude的Python项目详细描述


samplitude构建状态

随机变量的cli生成和绘制:

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0

samplitude这个词是sampleamplitude的组合词。这个 项目也是以一个方向开始的,因此应该发音为sampl-tude

samplitude是一个链,从生成器开始,后跟零或更多 过滤器,然后是使用者。大多数发电机是无限的 范围列表以及可能的stdin除外)。一些过滤器可以 将无限生成器转换为有限生成器(例如samplegobble), 一些滤波器可以将有限的生成器转换为无限的生成器,例如 选择

消费者是必须刷新输入的过滤器;列表clitojsonunique和绘图工具,histscatterline是 消费者的例子。列表消费者是Jinja2内置的 Jinja2的消费者是summin,以及max

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951

为了简单起见,s8e是samplitude的别名。

发电机

除了标准的范围函数外,我们还支持无限生成器

  • 指数(lambd)lambd是1.0除以期望的平均值。
  • 均匀(a,b):获取范围[a,b)[a,b]内的随机数 取决于四舍五入。
  • gauss(mu,sigma)mu是平均值,sigma是标准偏差。
  • 正常(mu,sigma):如上所述
  • 对数正态分布(mu,sigma):如上所述
  • 三角形(低,高):以给定的低和 上限,并具有介于两者之间的给定模式值。
  • beta(alpha,beta):参数的条件是alpha>;0beta>;0。返回的值介于0和1之间。
  • 伽马(α,β):如上所述
  • weibull(alpha,beta)alpha是比例参数,beta是形状 参数。
  • pareto(alpha):pareto分布。alpha是形状参数。
  • vonmises(mu,kappa)mu是平均角度,以0之间的弧度表示 2*pikappa是浓度参数,必须大于 大于或等于零。如果kappa等于零,这个分布会减少 在0到2*pi范围内的均匀随机角度

如果您已经安装了scipy.stats包,则

  • PERT(低、峰值、高) 支持分发。

我们有一个特殊的无限生成器(筛选器),它在有限生成器上工作:

  • 选择

其行为解释如下。

对于来自文件的输入,请对指定的环境变量使用words字典或管道连接

  • stdin()

stdin

如果该文件是csv文件,则有一个csv生成器读取csv文件 熊猫和输出第一列(如果没有其他指定)。指定 具有整数索引或列名的列:

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250

对于其他文件,我们有文件生成器:

>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica

最后,我们有com二进制排列继承自 他们的工作和行为正是这样。

>>> s8e "'ABC' | permutations | cli"

然而,它的输出是相当非unixy的,抽象通过:

>>> s8e "'HT' | permutations | cli"('H', 'T')('T', 'H')

因此,为了获得更好的输出,我们可以使用元素连接

>>> s8e "'HT' | permutations | elt_join | cli"
H T
T H

它还使用分隔符作为参数:

>>> s8e "'HT' | permutations | elt_join(';') | cli"
H;T
T;H

jinja的map函数已经支持此功能(请注意join周围的字符串):

>>> s8e "'HT' | permutations | map('join', ';') | cli"
H;T
T;H

因此,我们可以计算一组大小为10的置换数:

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
0

乘积生成器接受两个生成器并计算 这些。此外,

关于无穷大的警告

所有生成器都是(潜在的)无限生成器,必须使用 食用前的样品(n)

使用和安装

使用安装

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
1

或是为了止血,

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
2

示例

这是纯正的Jinja2:

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
3

但是,为了获得更为单一的输出,我们使用cli而不是list

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
4

为了限制输出,我们使用sample(n)

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
5

对于已经是有限的范围生成器来说,这不是很有帮助,但是 对一个无穷大的生成器更有用。上面的例子可能是 最好写成

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
6

然而,更有趣的是无限随机生成器,例如 统一生成器:

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
7

如果不需要那么多数字,我们可以对输出进行舍入(注意舍入 也是一个生成器,可以放在示例的任一侧:

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
8

选择和修改

示例行为相当于程序,或来自语言 比如哈斯克尔。支持别名:

$ samplitude "sin(0.31415) | sample(6) | round | cli"0.0
0.309
0.588
0.809
0.951
1.0
9

drop也可用:

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
0

为了移位缩放分布,我们可以使用移位比例过滤器。要获得从15开始的泊松点过程,我们可以运行

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
1

shiftscale都在生成器上工作,因此要添加sin(0.1)sin(0.2),我们可以运行

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
2

sin(0.1)+sin(0.2)line

选择和其他操作

choice与有限生成器一起使用,可以得到一个选择 从提供的生成器:

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
3

jinja2支持更通用的列表,例如字符串列表。因此,我们可以编写

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
4

在python中,字符串也可以iterable:

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
5

所以我们可以用

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
6

我们可以掷100个硬币,用计数器计数输出(即 集合。计数器

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
7

排序功能在计数器对象(a dicttype),因此如果希望按键排序输出,可以运行

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
8

有一个按值排序的小技巧,即通过交换计数器两次来排序:

samplitude "sin(0.31415) | sample(5) | round | max | cli"0.951
9

swap过滤器执行元素反转,元素反转 在字典中定义为中每个键值对的(value,key)列表 字典。

因此,为了得到三个最常见的anagram字符串,我们可以运行

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
0

使用stdin()作为生成器,我们可以导入samplitude。当心 stdin()刷新输入,因此stdin(当前)不能与 无限输入流。

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
1

如果我们愿意的话hufflels我们可以运行

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
2
>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
3

有趣的粉末情节

有趣的是,如果您安装了matplotlib,我们支持打印,hist 最有用的。

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
4

正态分布

指数分布可以用指数(lamba)绘制。注意 cli输出必须是链中的最后一个过滤器,因为这是一个命令行 仅限实用程序:

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
5

指数分布

要在打印后抑制输出,可以使用gobble过滤器清空 管道:

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
6

pert分发 接受输入lowpeakhigh

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
7

pert distribution

尽管hist是最有用的,但是可以将运行s8eon TimeSeries,其中绘图最有意义:

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
8

sine and line

也可以使用scatter函数,但要求输入流是 成对流,可以通过积生成器或通过 计数器过滤器:

>>> samplitude "csv('iris.csv', 'virginica') | counter | cli"050150250
9

正常散射"file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica 0

fft line

您自己的过滤器

如果以编程方式使用samplitude,则可以通过 发送词典

>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica
1

samplitude函数。

示例:秘书问题

假设您想模拟秘书问题…

间奏曲:问题

对那些不熟悉的人来说,你是老板,爱丽丝,他想雇一个新秘书 鲍勃。假设你想雇用所有候选人中最高的鲍勃,但是 候选者到达一条小溪,你只知道候选者的数量。为了 每个候选人,你必须接受(雇用)或拒绝该候选人。曾经的你 拒绝了候选人,您不能撤消决定。

解决这个问题的方法是看第一个n/ee~2.71828 欧拉常数)候选,然后接受第一个更高的候选 比所有的第一位候选人都重要。

抽样解决方案

正常(170,10)为候选生成器,并让n=100。我们创造了一个 过滤接受流和整数(n)并根据 找到解决办法。为了能够评估溶液的质量 稍后,过滤器必须转发整个候选列表;因此我们注释 我们用(c,false)选择一个我们拒绝的候选人,然后(c,true) 表示我们接受的候选人。

>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica
2

现在,用samplitude来模拟秘书问题:

>>> s8e "file('iris.csv') | sample(1) | cli"150,4,setosa,versicolor,virginica
3

在67%的情况下,我们可以期待得到一个最优秀的候选人, 而其余33%的病例将是均匀分布的。运行 10万人的规模为1000人的跑步揭示了这一结构。

秘书选择

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java EclipseLink级联持久化异常   java Android Studio本地库模块问题   java更新值Netbeans   java从消息数组中返回一条消息   java Struts标记:一个jsp中有多个寻呼机   java如何访问hibernate。cfg。xml,config。属性和log4j。来自项目文件夹外部的属性   JavaSpringPetCare示例,控制器操作如何链接到jsp的?   java理解try&catch和错误处理   javascript如何将数据从动态表存储到数据库   使用JAVA比较不同格式的值   java如何在返回服务时设置下拉列表的默认值?   java将oracle十六进制字符串转换为实际字符串值   java jpa子图和MappedSuperclass抛出未知实体   用Java实现swing自定义Matlab按钮外观   随机掷骰的java百分比数学结果不正确   java创建了文件路径,但照片无法保存,我一直在抓拍   java如何确保要使用的端口始终可用(即未使用)?   xsd如何用java生成JAXBC类。util。可选择的   java更改JOptionPane中的按钮布局。showOptionDialog()