线性代数的Cython帮助器,其类型记忆视图建立在本征C++库之上
Ceygen的Python项目详细描述
关于
ceygen是线性代数的二进制python扩展模块,输入了
内存视图。CEYGEN是建立在
功能
切根……
- 是快速的 -ceygen的主要存在理由是提供无开销代数 与键入的memoryview一起工作的cython项目的操作(尤其是 小尺寸)。对于每个函数都有一个没有python函数的代码路径 调用时,堆上不会分配内存,也不会复制数据。 特征本身也表现得相当出色 。
- 已记录在案 -请参见 文档 或直接跳到 联机文档
- 支持各种数据类型 -ceygen使用cython融合类型 模板)以及特征的模板性质,以支持各种数据类型 复制代码。虽然只有少数类型是预定义的(float、double,…),但是添加 一种新的类型是添加3条线并重建ceygen。
- 经过了广泛的测试 -ceygen的测试套件验证了其所有的公共方法, 包括无效输入引起的错误。感谢travis ci, 每次推送都是 自动测试 与 Python2.6 、 2.7 、 3.2 和 3.3 的对比
- 是多线程友好型的 -每个ceygen函数都不获取gil 除非它需要创建一个python对象(总是可以避免的);所有函数都是 声明了 nogil ,这样您就可以在 prange 块中调用它们,而不会丢失平行度。
- 提供描述性错误消息 -注意传播所有错误 正确地(从eigen开始)这样你就不会被困在调试你的程序。塞根 函数不会在无效输入时崩溃,而是会产生合理的错误。
- 与numpy很好地配合使用,但并不依赖于它。你不需要numpy来构建或运行 ceygen,但是由于cython,cython的memoryviews和numpy数组完全 在不复制数据的情况下可互换(如果可能)。测试套件 因为我们的懒惰,现在使用了numpy。-()
另一方面,ceygen…
- 取决于特征构建-t输入法 。ceygen希望在 /usr/lib/eigen3 正在构建时。安装eign是一个解包的问题 因为它是一个纯模板库,只在头中定义。切根没有 在运行时完全引用特征值,因为所有代码都已编译。
- 仍然提供很少的特征函数子集。我们增加了新的功能 只是因为我们在其他项目中需要他们,但我们相信困难的部分是 基础设施-实现一个新功能应该相当简单(使用 体面的Cython和C++知识。我们非常乐意提出请求! (一定要包括单元测试)
- 需要最新的cython(当前至少为0.19.1)才能编译。如果这是个问题, 您可以分发.cpp文件或最终的python扩展模块。
- 不会给cython带来eigen的优雅 -如果你想到懒惰的评估和 高级体验,别做梦了。ceygen会让你的代码更快,而不是更好。 阵列费用 将在这里有所帮助。
在一个大矩阵中计算矩阵乘积的一个简单例子可能看起来像
>>> cdef double[:, :] big = np.array([[1., 2., 2., 0., 0., 0.], >>> [3., 4., 0., -2., 0., 0.]]) >>> ceygen.core.dot_mm(big[:, 0:2], big[:, 2:4], big[:, 4:6]) [[ 2. -4.] [ 6. -8.]] >>> big [[ 1. 2. 2. 0. 2. -4.] [ 3. 4. 0. -2. 6. -8.]],
其中,上面的 dot_mm 调用不会复制任何数据,不会在堆上分配内存,也不会 需要 gil ,并使用矢量化(sse,altivec…)来充分利用您的 处理器。