线性代数的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…)来充分利用您的 处理器。

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

推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列