的多线程版本纽比·埃因苏姆功能

einsumt的Python项目详细描述


埃因苏姆

的多线程版本纽比·埃因苏姆功能。在

推理

Numpy的einsum是一个非常棒的函数,它允许用一行清晰的代码执行复杂的数组操作。然而,该功能通常不会受益于底层多核体系结构,并且所有操作都在单个CPU上执行。在

其思想是沿着所选的下标拆分einsum输入操作数,在线程中执行计算,然后通过求和(如果输出中不存在下标)或部分结果的串联来合成最终结果。在

使用

此功能可替代numpy的einsum:

from einsumt import einsumt as einsum
result = einsum(*operands, **kwargs)

在当前实现中,第一个操作数必须是下标字符串。其他差异将被视为意外错误。在

标杆管理

为了测试,如果einsumt在您的特定情况下是有益的,请运行基准测试,例如:

^{pr2}$

结果是:

Platform:           Linux
CPU type:           Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
Subscripts:         aijk,bkl->ail
Shapes of operands: (100, 100, 10, 10), (50, 10, 50)
Leading index:      automatic
Pool type:          default
Number of threads:  12
Execution time:
    np.einsum:      2755 ms  (average from 1 runs)
    einsumt:        507.9 ms  (average from 5 runs)
Speed up:           5.424x

更典型的基准调用包含在bench中_einsum.py公司文件。在

免责声明

在你开始因为很少或根本没有加速而责怪我之前,请记住线程化会花费额外的时间(例如,因为拆分和连接数据),所以einsumt函数只对较大的数组有利。还请注意,在许多情况下,numpy的einsum可以有效地替换为优化的点、张量点、matmul、换位等等的组合,而不是{}(当然,这是以代码清晰性为代价的)。在

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

推荐PyPI第三方库


热门话题
字符串Java字母替换无效   java Spring Roo JPA MS SQL Server无法打开JPA EntityManager组织。冬眠例外GenericJDBCException:无法打开连接   在scala中使用JavaWS对大型数据文件进行java流式处理   Java编译器是否将字节和短字符识别为文本?   java无法查找符号错误,空指针   mongodb在Java中重用数据库连接   java将多个StringArray从字符串文件获取到活动中   java是一个变量,它只保存最后一次鼠标单击的坐标   c#尺寸有限;添加、删除和洗牌   java如何在Android中显示来自资产文件夹的文本文件中的文本   Android应用程序中的java Tensorflow Lite自定义对象检测模型错误   java如何在foreachloop中使用scanner将来自命令行的输入存储到数组中   java如何定义一个好的存储库接口   Android中的java解析动态json对象