Pythorch的稀疏KLU求解器

torch-sparse-solve的Python项目详细描述


火炬稀疏解算

稀疏PyTorch CPU张量的torch.solve的替代方法 有效率的 KLU algorithm。在

仅CPU张量

这个图书馆是 SuiteSparse吉隆坡 算法。这意味着算法只针对 C阵列,因此仅适用于Pythorch CPU 张量。然而,对于足够大、足够稀疏的张量,它可能仍然是 值得做的GPU→CPU转换。在

使用

torch_sparse_solve库提供了一个函数solve(A, b),它解决了批处理矩阵×批处理矩阵torch.float64张量的系统Ax=b(注意与torch.solve相比的不同API):

importtorchfromtorch_sparse_solveimportsolvetorch.manual_seed(42)mask=torch.tensor([[[1,0,0],[1,1,0],[0,0,1]]],dtype=torch.float64)A=(mask*torch.randn(4,3,3,dtype=torch.float64)).to_sparse()b=torch.randn(4,3,2,dtype=torch.float64)x=solve(A,b)# compare to torch.solve:A=A.to_dense()print((x-torch.solve(b,A)[0]<1e-9).all())

True

注意事项

有两个主要的注意事项,你应该知道当使用 torch_sparse_solve.solve(A, b)

  • A在第一个维度(即批处理维度)中应该是“密集”的 应包含与批处理大小相同的元素。在

  • A应该对批处理中的每个元素具有相同的稀疏模式。 如果不是这样,您有两个选择:

    1. 为创建具有相同稀疏模式的新稀疏矩阵 批处理中的每一个元素都通过向稀疏项中添加零来实现 代表性。在
    2. 在批处理维度上循环并按顺序求解,即。 对于Ab中的每个元素,使用形状(1, m, m)和{} 分别。在

安装

库可以与pip一起安装:

^{pr2}$

请注意,不存在预制车轮。这意味着pip将 尝试从源安装库。确保你有 为您的操作系统安装了必要的依赖项。在

依赖关系

Linux

在Linux上,安装PyTorch、scipy和suitesparse通常是 足够安装库(以及 开发人员工具)。在一个 康达环境:

conda install suitesparse scipy
conda install pytorch -c pytorch
pip install torch_sparse_solve

Windows

在Windows上,安装过程有点复杂,因为 通常不安装生成依赖项。为了安装这些, 从下载Visual Studio Community 2017here。 在安装期间,转到Workloads并选择以下选项 工作量:

    <>桌面开发用C++ +/LI>
  • Python开发

然后转到Individual Components并选择以下内容 附加项目:

    C++ +CLI支持< /LI>
  • VC++2015.3 v14.00(v140)桌面工具集

下载并安装微软VisualC++ here。在

在这些安装步骤之后,运行以下命令insidea x64 Native Tools命令提示符用于VS 2017,在激活 康达环境:

setDISTUTILS_USE_SDK=1
conda install suitesparse scipy
conda install pytorch -c pytorch
pip install torch_sparse_solve

许可证和信用证

©Floris Laporte 2020,LGPL-2.1

该库部分基于:

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

推荐PyPI第三方库


热门话题
具有x86javapath的x64机器上x86java上的java JNI未满足链接错误   java将Pixmap的一部分上传到GPU   图像Java位图RLE8格式   java Android studio谷歌广告崩溃应用程序   java如何创建包含未知数量对象的变量?   Java计算给定int数组的所有可能组合   java JDBC classnotfound异常   httpclient中的java将HttpEntity转换为字符串的最优雅/正确的方法是什么?   如何从Java程序运行nano?   java在安卓中调用自定义类/方法   调用方法和JOptionPane后,允许代码继续执行所需的java计时器或其他想法   关于侦听器的向量Java并发问题   线程池执行器Java线程池   java配置DTO上的Swagger javax验证约束   Java中用于按钮功能的swing操作命令   ServletOutputStream中的java设置状态代码   java打印输入数组的平均值