跳转到主要内容

通用框架和xarray扩展,用于计算机模型模拟

项目描述

Build Status Coverage Status Documentation Status Citation

xarray-simlab 是一个Python库,它提供了一个通用框架来以模块化方式构建计算模型,并扩展了 xarray 以使用xarray的 Dataset 结构设置和运行模拟。它旨在实现快速、交互式和探索性的建模。

xarray-simlab 与PyData生态系统的其他库,如 daskzarr,有很好的集成。

简而言之

下面的康威生命游戏示例改编自 Jake VanderPlas 的这篇 博客文章

  1. 通过编写紧凑的Python类来创建新的模型组件,即非常类似于 dataclasses

import numpy as np
import xsimlab as xs

@xs.process
class GameOfLife:
    world = xs.variable(
        dims=('x', 'y'), intent='inout', encoding={'fill_value': None}
    )

    def run_step(self):
        nbrs_count = sum(
            np.roll(np.roll(self.world, i, 0), j, 1)
            for i in (-1, 0, 1) for j in (-1, 0, 1)
            if (i != 0 or j != 0)
        )
        self._world_next = (nbrs_count == 3) | (self.world & (nbrs_count == 2))

    def finalize_step(self):
        self.world[:] = self._world_next


@xs.process
class Glider:
    pos = xs.variable(dims='point_xy', description='glider position')
    world = xs.foreign(GameOfLife, 'world', intent='out')

    def initialize(self):
        x, y = self.pos

        kernel = [[1, 0, 0],
                  [0, 1, 1],
                  [1, 1, 0]]

        self.world = np.zeros((10, 10), dtype=bool)
        self.world[x:x+3, y:y+3] = kernel
  1. 只需提供一个模型组件的字典即可创建新的模型。

model = xs.Model({'gol': GameOfLife,
                  'init': Glider})
  1. 创建一个输入 xarray.Dataset,运行模型并获取一个输出 xarray.Dataset

input_dataset = xs.create_setup(
    model=model,
    clocks={'step': np.arange(9)},
    input_vars={'init__pos': ('point_xy', [4, 5])},
    output_vars={'gol__world': 'step'}
)

output_dataset = input_dataset.xsimlab.run(model=model)
>>> output_dataset
<xarray.Dataset>
Dimensions:     (point_xy: 2, step: 9, x: 10, y: 10)
Coordinates:
  * step        (step) int64 0 1 2 3 4 5 6 7 8
Dimensions without coordinates: point_xy, x, y
Data variables:
    init__pos   (point_xy) int64 4 5
    gol__world  (step, x, y) bool False False False False ... False False False
  1. 使用方法链以函数式风格进行模型设置、预处理、运行、后处理和可视化。

import matplotlib.pyplot as plt

with model:
    (input_dataset
     .xsimlab.update_vars(
         input_vars={'init__pos': ('point_xy', [2, 2])}
     )
     .xsimlab.run()
     .gol__world.plot.imshow(
         col='step', col_wrap=3, figsize=(5, 5),
         xticks=[], yticks=[],
         add_colorbar=False, cmap=plt.cm.binary)
    )
doc/_static/gol.png

文档

文档托管在 ReadTheDocs 上: http://xarray-simlab.readthedocs.io

许可证

3-clause(“修改”或“新”)BSD许可证,请参阅 许可证文件

xarray-simlab使用了xarray、pandas和dask库的代码片段。xarraypandasdask的许可证在“licenses”目录中复现。

致谢

本项目的支持来自于GFZ赫尔姆霍兹研究中心地球表面过程建模小组。地球表面过程建模

引用

如果您在科学出版物中使用xarray-simlab,我们将非常感谢您的引用

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

xarray-simlab-0.5.0.tar.gz (146.8 kB 查看哈希)

上传时间 源代码

构建分发

xarray_simlab-0.5.0-py3-none-any.whl (85.3 kB 查看哈希)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面