python数组数学(moa)

python-moa的Python项目详细描述


Build StatusDocumentation StatusBinder

阵列数学(MOA)

MOA是处理数组的数学严格方法 是由Lenore Mullins开发的。MOA被引导 遵循以下原则。

  1. 一切都是一个数组,都有一个形状。鳞片。向量。恩达雷。

  2. 在计算的每个步骤中,计算的形状是什么?

回答此守护人没有越界标引和有效 正在运行程序。

  1. 生产给定产品所需的指标和操作是什么? 结果中的索引?

一旦我们解决了这个步骤,我们就有了 具有Church Rosser的计算 财产。允许我们真正比较算法,分析 算法,最后映射到一个低级的算法 实施。有关更多问题,请参见 documentation。这个 文档提供了理论、实现细节和 引导。

指导开发的重要问题:

  • [X]在只知道维度的情况下,MOA的简单实现是可能的吗?
  • [X]我们是否可以表示复杂的操作和einsum math:requires+red, transpose
  • []阵列的接口是什么?(形状、索引功能)
  • 如何包装预先存在的数值例程?

安装

pip install python-moa

文档

文档可在 python-moa.readthedocs.org。这个 文档提供了理论、实现细节和 python-moa的开发和使用指南。

示例

一些维护良好的Jupyter笔记本可用于 试验 binder

python前端ast生成

frommoa.frontendimportLazyArrayA=LazyArray(name='A',shape=(2,3))B=LazyArray(name='B',shape=(2,3))expression=((A+B).T)[0]expression.visualize(as_text=True)
psi(Ψ)
├── Array _a2: <1> (0)
└── transpose(Ø)
    └── +
        ├── Array A: <2 3>
        └── Array B: <2 3>

形状计算

expression.visualize(stage='shape',as_text=True)
psi(Ψ): <2>
├── Array _a2: <1> (0)
└── transpose(Ø): <3 2>
    └── +: <2 3>
        ├── Array A: <2 3>
        └── Array B: <2 3>

还原为DNF

expression.visualize(stage='dnf',as_text=True)
+: <2>
├── psi(Ψ): <2>
│   ├── Array _a6: <2> (_i3 0)
│   └── Array A: <2 3>
└── psi(Ψ): <2>
    ├── Array _a6: <2> (_i3 0)
    └── Array B: <2 3>

降到onf

expression.visualize(stage='onf',as_text=True)
function: <2> (A B) -> _a17
├── if (not ((len(B.shape) == 2) and (len(A.shape) == 2)))
│   └── error arguments have invalid dimension
├── if (not ((3 == B.shape[1]) and ((2 == B.shape[0]) and ((3 == A.shape[1]) and (2 == A.shape[0])))))
│   └── error arguments have invalid shape
├── initialize: <2> _a17
└── loop: <2> _i3
    └── assign: <2>
        ├── psi(Ψ): <2>
        │   ├── Array _a18: <1> (_i3)
        │   └── Array _a17: <2>
        └── +: <2>
            ├── psi(Ψ): <2>
            │   ├── Array _a6: <2> (_i3 0)
            │   └── Array A: <2 3>
            └── psi(Ψ): <2>
                ├── Array _a6: <2> (_i3 0)
                └── Array B: <2 3>

生成python源代码

print(expression.compile(backend='python',use_numba=True))
@numba.jitdeff(A,B):if(not((len(B.shape)==2)and(len(A.shape)==2))):raiseException('arguments have invalid dimension')if(not((3==B.shape[1])and((2==B.shape[0])and((3==A.shape[1])and(2==A.shape[0]))))):raiseException('arguments have invalid shape')_a17=numpy.zeros((2,))for_i3inrange(0,2):_a17[(_i3,)]=(A[(_i3,0)]+B[(_i3,0)])return_a17

开发

下载nix。没有其他的 依赖项和所有构建在linux和osx上都是相同的。

演示

jupyter环境

nix-shell dev.nix -A jupyter-shell

ipython环境

nix-shell dev.nix -A ipython-shell

测试

nix-build dev.nix -A python-moa

包括基准(numba、numpy、pytorch、tensorflow)

nix-build dev.nix -A python-moa --arg benchmark true

文档

nix-build dev.nix -A docs
firefox result/index.html

码头工人

nix-build moa.nix -A docker
docker load < result

发展理念

这是一个概念的证明,应该以假设和 目标。

  1. 假设维度是已知的每个操作。这种情况 没有多少工作可以轻松地知道一个上限。

  2. MOA编译器设计为模块化,具有清晰的分隔: 解析、形状计算、dnf缩减、onf缩减和代码 一代人。

  3. 所有的代码都是以逻辑可以移植到任何 低级语言(例如C)。这意味着没有面向对象的 设计和使用简单的数据结构。字典应该是 使用的最高级别数据结构。

  4. 性能不是一个大问题,而是可读性应该是 首选。此代码的目标是作为 MOA初学者。记住,测试通常是 文件也是。

  5. 应避免运行时依赖关系。测试(pytest,假设) 可视化(graphviz)是适当异常的示例。

贡献

欢迎投稿!对于错误报告或请求,请提交问题。

作者

原作者是Christopher Ostrouchov。资金使得这个 可能的项目来自Quansight LLC

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

推荐PyPI第三方库


热门话题
编译器构造为什么在Java中允许初始化对Null的引用?   java手动调用javax的actionPerformed。摆动计时器   使用git分支的java Maven版本控制   Java8句子流   java JPA OneToOne和OneToMany实体实例化/创建   java如何将值添加到列表<Map<String,Object>>?   java如何使用ComboBox在一个框架内更改JPanel。getSelectedIndex()   java在比较XML和xmlunit时忽略文本差异   java无法从其他pc连接到本地主机   Java中分配对象id的优雅方式   Java中静态变量的使用   java试图从Neteller获取OAuth访问令牌时产生错误:“服务器返回HTTP响应代码:401表示URL”   Java:基元类型是否会影响性能?   java可以让hasNext()不区分大小写吗?   基于AutoCompleteTextView建议属性或AutoCompleteTextView值的java Android搜索   java流文件到firefox浏览器有时无法打开应用程序对话框   在没有ArrayList的Java中返回数组中的搜索结果   复制java。木卫一。IOException:数据错误(CRC)   java为什么我在尝试删除Facebook测试用户时会出现“方法未实现”错误   java如何使用JNA调用SetProcessReliationPolicy