用于指定参数扫描的micro dsl

pscan的Python项目详细描述


一种模块,其唯一目的是通过 用于指定要扫描的参数值的通用框架。

组合参数扫描,联合参数扫描,“科学” 参数扫描,以及重复多少次的高级选项 可以进行模拟。

这个模块是在作者厌倦了同样的内容之后编写的 每次他想扫描他的 模拟。

模块设计的动力是意识到 基本上只有四种类型的“参数扫描” 必须完成。

  1. 多次运行相同的参数(例如stoch模拟)
  2. 共同改变某些参数(例如(i,j)=(1,2),(2,3),(3,4), …)
  3. 组合地改变参数(例如(i,j)=(1,1),(1,2),(2,1), (2,2))
  4. 改变“科学的”(例如(i0,j),(i,j0)表示固定的i0,j0,变化的 i,j)

所有这三项都可以用声明的方式指定(例如,用英语 句子)相对容易,但通常每个句子都需要编码 容易搞错嵌套循环。此模块将 可以查询iterable中的哪些参数以获取下一组 扫描中的参数。如果扫描中途停止,它将记住 它的状态,允许你重新加载,改变扫描参数, 继续跑步。如果您的代码需要 根据先前的模拟定期生成下一个参数。

如果有几个“联合”的不同参数,则每个“组”都有 将以组合方式交互。更抽象地说,你应该考虑 与“单个”相同的联合变化参数集 参数。

下面是一个使用包的所有特性的示例。说我们 有两个参数ab,我们希望它们共同变化,并且 另一个参数c,我们想根据 (a,b)。为了使事情更复杂,我们要运行模拟2 每组(a,b,c)的时间,除了如果“c”太大,我们运行 减少重复以节省时间。这通常会涉及很多 仔细编码的样板文件,但是我们只能告诉PScan.Scan 我们想要的:

>>> from pscan import Scan
>>> import numpy as np
>>> def f(a,b,c):
>>>     print('a = ', a, ', b = ', b, ', c = ', c)
>>> p = {}
>>> p['a'] = np.linspace(0, 10, 5)
>>> p['b'] = np.linspace(0.1, -0.5, 5)
>>> p['c'] = np.linspace(10, 20, 3)
>>> default_count = lambda p: 2
>>> # None specifies to default to previous value
>>> big_c_count = lambda p: 1 if p['c'] >= 14 else None
>>>
>>> s = Scan.from_dict(p, joint_lists=[['a','b']])
>>> s.add_count(default_count) # these will be called
>>> s.add_count(big_c_count) # in the order they were added
>>> s.run_scan(f) # verify scan validity and run

    a =  0.0 , b =  0.1 , c =  10.0
    a =  0.0 , b =  0.1 , c =  10.0
    a =  2.5 , b =  -0.05 , c =  10.0
    a =  2.5 , b =  -0.05 , c =  10.0
    a =  5.0 , b =  -0.2 , c =  10.0
    a =  5.0 , b =  -0.2 , c =  10.0
    a =  7.5 , b =  -0.35 , c =  10.0
    a =  7.5 , b =  -0.35 , c =  10.0
    a =  10.0 , b =  -0.5 , c =  10.0
    a =  10.0 , b =  -0.5 , c =  10.0
    a =  0.0 , b =  0.1 , c =  15.0
    a =  2.5 , b =  -0.05 , c =  15.0
    a =  5.0 , b =  -0.2 , c =  15.0
    a =  7.5 , b =  -0.35 , c =  15.0
    a =  10.0 , b =  -0.5 , c =  15.0
    a =  0.0 , b =  0.1 , c =  20.0
    a =  2.5 , b =  -0.05 , c =  20.0
    a =  5.0 , b =  -0.2 , c =  20.0
    a =  7.5 , b =  -0.35 , c =  20.0
    a =  10.0 , b =  -0.5 , c =  20.0

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

推荐PyPI第三方库


热门话题
java是安卓的子类。所容纳之物ClipData或ClipData。项目   毕加索中的java错误get()无法应用于(安卓.content.Context)   管道接受来自控制台和管道文本文件的Java输入   Java Windows文件权限   java如何在Selenium中找到此按钮?我尝试了partiallinktext并多次尝试cssSelector   java如何在spring jdbc模板中生成流式sql?   方法中的java全局值变为null   java设备“Mobile Intel(R)4 Series Express芯片组系列”(\\.\DISPLAY1)初始化失败:   java查找单独文件夹中的资源到类文件   java iCal4j添加会议说明   java如何处理InvalidTokenException?   oop如果Java不支持运算符重载,增量运算符如何在整数实例上工作?   java如何在Hibernate中获取<map>