PHAT的Python绑定,基于C++的持久同调算法工具箱
phat的Python项目详细描述
持久同调算法工具包(PHAT)
由一个带z:'sub:'2'系数的有序边界矩阵计算。
这个软件包包含了几个算法变体的代码:
*标准算法(见[1]\153页)
*来自[2]的"row"算法(在那篇论文中称为phrow)
*如[3]所述的"twist"算法(默认算法)
*呈现的"chunk"算法d在[4]
*谱序列算法(见[1]
中,除了标准算法外,所有算法都利用边界矩阵的特殊结构在计算中走捷径。如果phat是使用openmp支持编译的,那么块和谱序列算法可以利用多个cpu核。
表单可以很容易地提取持久性对。
或者,可以使用以
算法为参数的"计算持久性对函数",减少给定的"边界矩阵",并将
结果对存储在给定的"持久性对"对象中。
"boundary_matrix"类以"representation"类作为参数。
此表示定义如何表示矩阵的列,以及如何执行低级操作(例如列添加)。正确选择
表示类对于程序的性能和选择
算法一样重要。我们提供了以下表示类的选择:
BR/> *"向量向量":每个列被表示为整数的"‘STD::vector’",包含列的非零项的索引。矩阵本身STD:"Std::vector"。Br/**‘Vector THEAP':每个列都表示为整数的"STD::vector",包含列的非零项的索引。矩阵本身STD:"STD:向量"。Br/**‘Vector’SET’:每个列是整数的"STD::集",与上面的含义相同。矩阵存储STD:"vector":"这些列"。BR/> *‘Vector’LIST’:每个列是整数的"STD::列表",与上面的含义相同。矩阵存储为这样的列的‘STD::vector’。
*`` heap_pivot_column``与稀疏版本中的想法相同。而不是STD:"设置",枢轴列由"STD:PrimyIyQueQue}"表示。
* 'FuluxPioToVixCube '':与稀疏版本相同的想法。但是,不是将"STD::‘设置’,而是将枢轴列扩展成大小n的位向量(矩阵的维数)。为了避免代价高昂的初始化,该类会记住哪些条目已被某个数据透视列操作过,并在另一列成为数据透视时仅更新这些条目。
*``位树数据透视列'`(默认表示法):类似于``全数据透视列',但实现是更有效率。在内部,它是一个位集,具有对非零元素的快速迭代和对e最大元素。
installation
----
如果您希望使用发布版本的phat,您只需从pypi安装:
位置$phat。然后您可以:
这将为与您的"pip"可执行文件关联的任何python安装安装安装phat。
请确保您使用来自您的"python"可执行文件所在目录的"pip"!
目前,phat python绑定的工作原理是:
*Linux with python 2.7(在ubuntu 14.04上使用系统python进行测试)
*Linux with python 3.5(在ubuntu 14.04上使用anaconda进行测试)
*Mac OS X with python 2.7.12(在Sierra上使用自制程序进行测试)
*Mac OS X withpython 3.5(使用自制软件在sierra上测试)
其他配置未经测试。
请注意,此软件包不适用于mac os x操作系统中附带的python 2.7.10。这些来自"python.org"的智慧之言值得注意:
os x附带的python的ion对学习很有帮助,但不利于开发。
os x附带的版本可能已经从当前的python官方版本中过时,
该版本被认为是稳定的生产版本。
根据您的喜好,使用自制或水蟒的OS X。
如果您希望我们支持某个平台,请告知我们,如果可以,我们将提供支持。
单个三角形:
>3
<4
5<
定义边界矩阵使用所选的内部表示
边界矩阵=phat.边界矩阵(表示=phat.表示.向量向量)
[]),
(1,[0,1]),
(0,[]),
(1,[1,3]),
(1,[0,3]),
(2,[2,4,5])
边界矩阵(表示=…,列=…)
将合并矩阵的创建和列的分配
l在边界矩阵中。列:
s="列%d表示维度为%d的单元格。"%(列索引,列维度)
如果(列边界):
s=s+"其边界由单元格"+"组成。联接([str(c)表示列边界中的c])
打印
打印("over全部,边界矩阵有%d个条目。"%len(边界矩阵))
pairs=boundary_matrix.compute_persistence_pairs()
print("\n有%d个持久性对:"%len(pairs))
对于成对:
print("出生:%d,死亡:%d%pa"ir)
参考文献:
…[1]H.Edelsbrunner,J.Harer:计算拓扑,导论。美国数学学会,2010年,ISBN 0-8218-4925-5
。[2]V.de Silva,D.Morozov,M.Vejdemo-Johansson:持久同源性中的二元论。反问题27,2011
…[3]C.Chen,M.Kerber:具有扭曲的持久同调计算。第27届欧洲计算几何研讨会,2011年。
…[4]U.Bauer,M.Kerber,J.Reininghaus:Clear and Compress:计算大块持久同源性。arxiv:1303.0477_
_ arxiv:1303.0477:http://arxiv.org/pdf/1303.0477.pdf
。_`持久同源算法工具包`:https://bitbucket.org/phat/phat code
。_` org`:http://docs.python-guide.org/en/latest/starting/install/osx/
由一个带z:'sub:'2'系数的有序边界矩阵计算。
这个软件包包含了几个算法变体的代码:
*标准算法(见[1]\153页)
*来自[2]的"row"算法(在那篇论文中称为phrow)
*如[3]所述的"twist"算法(默认算法)
*呈现的"chunk"算法d在[4]
*谱序列算法(见[1]
中,除了标准算法外,所有算法都利用边界矩阵的特殊结构在计算中走捷径。如果phat是使用openmp支持编译的,那么块和谱序列算法可以利用多个cpu核。
表单可以很容易地提取持久性对。
或者,可以使用以
算法为参数的"计算持久性对函数",减少给定的"边界矩阵",并将
结果对存储在给定的"持久性对"对象中。
"boundary_matrix"类以"representation"类作为参数。
此表示定义如何表示矩阵的列,以及如何执行低级操作(例如列添加)。正确选择
表示类对于程序的性能和选择
算法一样重要。我们提供了以下表示类的选择:
BR/> *"向量向量":每个列被表示为整数的"‘STD::vector’",包含列的非零项的索引。矩阵本身STD:"Std::vector"。Br/**‘Vector THEAP':每个列都表示为整数的"STD::vector",包含列的非零项的索引。矩阵本身STD:"STD:向量"。Br/**‘Vector’SET’:每个列是整数的"STD::集",与上面的含义相同。矩阵存储STD:"vector":"这些列"。BR/> *‘Vector’LIST’:每个列是整数的"STD::列表",与上面的含义相同。矩阵存储为这样的列的‘STD::vector’。
*`` heap_pivot_column``与稀疏版本中的想法相同。而不是STD:"设置",枢轴列由"STD:PrimyIyQueQue}"表示。
* 'FuluxPioToVixCube '':与稀疏版本相同的想法。但是,不是将"STD::‘设置’,而是将枢轴列扩展成大小n的位向量(矩阵的维数)。为了避免代价高昂的初始化,该类会记住哪些条目已被某个数据透视列操作过,并在另一列成为数据透视时仅更新这些条目。
*``位树数据透视列'`(默认表示法):类似于``全数据透视列',但实现是更有效率。在内部,它是一个位集,具有对非零元素的快速迭代和对e最大元素。
installation
----
如果您希望使用发布版本的phat,您只需从pypi安装:
位置$phat。然后您可以:
这将为与您的"pip"可执行文件关联的任何python安装安装安装phat。
请确保您使用来自您的"python"可执行文件所在目录的"pip"!
目前,phat python绑定的工作原理是:
*Linux with python 2.7(在ubuntu 14.04上使用系统python进行测试)
*Linux with python 3.5(在ubuntu 14.04上使用anaconda进行测试)
*Mac OS X with python 2.7.12(在Sierra上使用自制程序进行测试)
*Mac OS X withpython 3.5(使用自制软件在sierra上测试)
其他配置未经测试。
请注意,此软件包不适用于mac os x操作系统中附带的python 2.7.10。这些来自"python.org"的智慧之言值得注意:
os x附带的python的ion对学习很有帮助,但不利于开发。
os x附带的版本可能已经从当前的python官方版本中过时,
该版本被认为是稳定的生产版本。
根据您的喜好,使用自制或水蟒的OS X。
如果您希望我们支持某个平台,请告知我们,如果可以,我们将提供支持。
单个三角形:
>3
<4
5<
定义边界矩阵使用所选的内部表示
边界矩阵=phat.边界矩阵(表示=phat.表示.向量向量)
[]),
(1,[0,1]),
(0,[]),
(1,[1,3]),
(1,[0,3]),
(2,[2,4,5])
边界矩阵(表示=…,列=…)
将合并矩阵的创建和列的分配
l在边界矩阵中。列:
s="列%d表示维度为%d的单元格。"%(列索引,列维度)
如果(列边界):
s=s+"其边界由单元格"+"组成。联接([str(c)表示列边界中的c])
打印
打印("over全部,边界矩阵有%d个条目。"%len(边界矩阵))
pairs=boundary_matrix.compute_persistence_pairs()
print("\n有%d个持久性对:"%len(pairs))
对于成对:
print("出生:%d,死亡:%d%pa"ir)
参考文献:
…[1]H.Edelsbrunner,J.Harer:计算拓扑,导论。美国数学学会,2010年,ISBN 0-8218-4925-5
。[2]V.de Silva,D.Morozov,M.Vejdemo-Johansson:持久同源性中的二元论。反问题27,2011
…[3]C.Chen,M.Kerber:具有扭曲的持久同调计算。第27届欧洲计算几何研讨会,2011年。
…[4]U.Bauer,M.Kerber,J.Reininghaus:Clear and Compress:计算大块持久同源性。arxiv:1303.0477_
_ arxiv:1303.0477:http://arxiv.org/pdf/1303.0477.pdf
。_`持久同源算法工具包`:https://bitbucket.org/phat/phat code
。_` org`:http://docs.python-guide.org/en/latest/starting/install/osx/