python库实现了线性运算符,允许在不需要显式创建密集(或稀疏)矩阵的情况下解决大规模优化问题。

pylops的Python项目详细描述


Pylops

pypi versionanaconda服务器徽章构建状态azuredevops statusdocumentation statuscodacy badgecodacy coverage操作系统支持pypi-python versionslack status

目标

这个python库的灵感来自于matlabspot–一个线性运算符工具箱项目。

线性算子和反问题是许多常用算法的核心 在信号处理、图像处理和遥感中。在处理小规模问题时, python数值科学库遵循">numpy 并且scipy允许执行许多 基本矩阵运算(例如,矩阵向量积的计算和矩阵的操作) 以简单紧凑的方式。

然而,许多有用的算子并不适合于显式矩阵 用于解决大规模问题时的表示。另一方面,pylops算子仍然表示一个矩阵 并且可以用类似的方法来处理,但不依赖于密集(或稀疏)矩阵本身的显式创建。相反地, 前向和伴随算子由模拟矩阵效果的小块代码表示 在一个向量或另一个矩阵上。

幸运的是,许多迭代方法(如cg,lsqr)不需要知道矩阵的各个项就可以求解线性系统。 这种解算器只需要计算正序和伴随矩阵向量乘积,就像对任何pylops算子所做的那样。

下面是一个简单的例子,展示了如何创建稠密的一阶一阶导数算子, 使用numpy/scipy命令应用和反转:

importnumpyasnpfromscipy.linalgimportlstsqnx=7x=np.arange(nx)-(nx-1)/2D=np.diag(0.5*np.ones(nx-1),k=1)- \
    np.diag(0.5*np.ones(nx-1),k=-1)D[0]=D[-1]=0# take away edge effects# y = Dxy=np.dot(D,x)# x = D'yxadj=np.dot(D.T,y)# xinv = D^-1 yxinv=lstsq(D,y)[0]

同样使用pylops命令:

frompylopsimportFirstDerivativeDlop=FirstDerivative(nx,dtype='float64')# y = Dxy=Dlop*x# x = D'yxadj=Dlop.H*y# xinv = D^-1 yxinv=Dlop/y

注意,第二种方法不需要创建密集矩阵,从而减少了 将导数应用于输入向量x。此外,代码比前一种情况更加紧凑和精确 让用户专注于将要通过反演求解的正问题方程的公式化。

项目结构

存储库的组织如下:

  • pylops:包含各种线性运算符和辅助例程的python库
  • pytests:一组pytests
  • 测试数据:pytests和文档中使用的示例数据集
  • 文档:Sphinx文档
  • 示例:使用Sphinx Gallery嵌入文档中的每个线性运算符的一组Python脚本示例
  • 教程:使用Sphinx Gallery嵌入到文档中的一组Python脚本教程

开始

您需要Python3.5或更高版本

来自PYPI

如果你想在代码中使用pylops, 在终端中键入以下命令,将其安装到python环境中:

pip install pylops

打开python终端并键入:

import pylops

如果你没有看到任何错误,你应该好好去享受!

来自Conda Forge

或者,您可以使用conda forge发行版在终端中键入以下命令来安装pylops:

conda install -c conda-forge pylops

来自Github

您也可以直接从主节点安装(尽管不建议这样做)

pip install git+https://git@github.com/equinor/pylops.git@master

来自Docker

最后,如果您只是想尝试pylops,但是没有python在您的 本地机器,您可以使用我们的docker图像。在你的电脑上安装Docker之后, 在终端中键入以下命令(请注意,这将需要一些时间 按下载和安装Docker映像的方式键入:

docker run -it -v /path/to/local/folder:/home/jupyter/notebook -p 8888:8888 mrava87/pylops:notebook

这将给你一个地址,你可以放在你的浏览器,并将打开一个与Pylops的Jupyter笔记本电脑环境 以及安装的其他基本python库。这里/path/to/local/folder是本地文件夹的绝对路径 在计算机上创建笔记本(或包含要继续处理的笔记本)。注意 对笔记本所做的任何操作都将保存在本地文件夹中。

更大的图像与康达分布也可用。只需在 上一个命令。

贡献

想为这个项目做贡献吗?添加氖W操作员或教程?< /P>

我们建议使用蟒蛇分布 确保通过conda包管理器安装所有依赖项。跟随 开始之前,请仔细阅读以下说明和贡献文件。

<H3>1。分叉并克隆存储库

在终端中执行以下命令:

git clone https://github.com/your_name_here/pylops.git
<H3>2。在新的conda环境中安装pylops

以确保pylops的进一步开发在与 根据requirements-dev.txtenvironment-dev.yml文件定义,我们建议创建一个新的conda环境。

第一次克隆存储库时,请运行以下命令:

make dev-install_conda

要确保所有设置都正确,请运行测试:

importnumpyasnpfromscipy.linalgimportlstsqnx=7x=np.arange(nx)-(nx-1)/2D=np.diag(0.5*np.ones(nx-1),k=1)- \
    np.diag(0.5*np.ones(nx-1),k=-1)D[0]=D[-1]=0# take away edge effects# y = Dxy=np.dot(D,x)# x = D'yxadj=np.dot(D.T,y)# xinv = D^-1 yxinv=lstsq(D,y)[0]
0

确保没有测试失败,这将确保安装成功。

每次打开新终端时,请记住始终通过键入以下命令激活conda环境:

importnumpyasnpfromscipy.linalgimportlstsqnx=7x=np.arange(nx)-(nx-1)/2D=np.diag(0.5*np.ones(nx-1),k=1)- \
    np.diag(0.5*np.ones(nx-1),k=-1)D[0]=D[-1]=0# take away edge effects# y = Dxy=np.dot(D,x)# x = D'yxadj=np.dot(D.T,y)# xinv = D^-1 yxinv=lstsq(D,y)[0]
1

文档

Pylops的官方文档可在此处获得。

访问此页开始了解不同的运营商及其应用程序,以及如何 自己创建新的操作员并进入贡献者列表。

此外,如果使用开发人员环境安装了pylops,还可以通过 键入以下命令:

importnumpyasnpfromscipy.linalgimportlstsqnx=7x=np.arange(nx)-(nx-1)/2D=np.diag(0.5*np.ones(nx-1),k=1)- \
    np.diag(0.5*np.ones(nx-1),k=-1)D[0]=D[-1]=0# take away edge effects# y = Dxy=np.dot(D,x)# x = D'yxadj=np.dot(D.T,y)# xinv = D^-1 yxinv=lstsq(D,y)[0]
2

创建文档后,可以对源代码进行任何更改,并通过 只需键入

importnumpyasnpfromscipy.linalgimportlstsqnx=7x=np.arange(nx)-(nx-1)/2D=np.diag(0.5*np.ones(nx-1),k=1)- \
    np.diag(0.5*np.ones(nx-1),k=-1)D[0]=D[-1]=0# take away edge effects# y = Dxy=np.dot(D,x)# x = D'yxadj=np.dot(D.T,y)# xinv = D^-1 yxinv=lstsq(D,y)[0]
3

请注意,如果创建了新的示例或教程(如果对以前可用的示例或教程进行了任何更改) 在您的更改可见之前,您需要重新生成整个文档。

历史记录

Pylops最初是由equinor编写的,目前由equinor维护。 它是一个灵活且可扩展的python库,用于大规模的线性优化 运营商可以根据我们的需要进行定制,并为自由软件社区做出贡献。

引用

在科学出版物中使用pylops时,请引用以下文章:

  • Ravasi,M.和Vasconcelos I.,Pylops——用于大规模优化的线性运算符Python库, arxiv预印本,arxiv:1907.12349(2019年)。

贡献者

  • 马泰奥·拉瓦西,MRAVA87
  • 卡洛斯·达科斯塔,卡科
  • Dieter Werthmüller,普里萨
  • 特里斯坦·范吕文,特里斯坦·范吕文

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

推荐PyPI第三方库


热门话题
java从类对象访问静态变量   java无法在三星A5上使用Toast(2016年)   java处理阻止图像在选择其他图像时消失   java Install4j Linux应用程序   swing在jpanel form java上具有暂停/恢复按钮   java Log4J登录年份文件夹   java XmlPullParser资源管理   JavaGoogleCloudEndpoints方法总是导致NullPointerException,为什么?   java JSON到带有POJO和Enum的Spring控制器   java制作自定义名称生成器?   java仅在设备屏幕的特定部分显示google地图多段线   java图像没有重新绘制,只是相乘   java如何将格式化字符串转换为浮点?   java无法提前很长时间安排TimerTask   当引用函数::和时,java Intellij IDEA无法解析“和”函数接口方法   java结束了dowhile循环   java Spring路径变量绑定   log4j API中FileAppender中的java问题   java使用QMessageBox从选项列表中进行选择