python库实现了线性运算符,允许在不需要显式创建密集(或稀疏)矩阵的情况下解决大规模优化问题。
pylops的Python项目详细描述
目标
这个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> 我们建议使用蟒蛇分布
确保通过 在终端中执行以下命令: 以确保pylops的进一步开发在与
根据 第一次克隆存储库时,请运行以下命令: 要确保所有设置都正确,请运行测试: 确保没有测试失败,这将确保安装成功。 每次打开新终端时,请记住始终通过键入以下命令激活conda环境: Pylops的官方文档可在此处获得。
访问此页开始了解不同的运营商及其应用程序,以及如何
自己创建新的操作员并进入 此外,如果使用开发人员环境安装了pylops,还可以通过
键入以下命令: 创建文档后,可以对源代码进行任何更改,并通过
只需键入 请注意,如果创建了新的示例或教程(如果对以前可用的示例或教程进行了任何更改)
在您的更改可见之前,您需要重新生成整个文档。 Pylops最初是由equinor编写的,目前由equinor维护。
它是一个灵活且可扩展的python库,用于大规模的线性优化
运营商可以根据我们的需要进行定制,并为自由软件社区做出贡献。 在科学出版物中使用pylops时,请引用以下文章:conda
包管理器安装所有依赖项。跟随
开始之前,请仔细阅读以下说明和贡献文件。
<H3>2。在新的conda环境中安装pylopsgit clone https://github.com/your_name_here/pylops.git
requirements-dev.txt
或environment-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
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
文档
贡献者列表。
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
历史记录
引用
贡献者
推荐PyPI第三方库