python3的张量网络收缩函数。

ncon的Python项目详细描述


NCO公司

nco是一个Python 3包,它实现了nco函数,如下所述: https://arxiv.org/abs/1402.0939 这个Python实现缺少在 但界面是一样的。在

nco需要numpy并使用numpy ndarray。它也适用于 来自this包的各种张量, 但并不需要。在

安装

pip install --user ncon

使用

此包导出的唯一内容是函数ncon。它需要一个列表 要收缩的张量,以及一个列表索引列表,该列表指定 与之签约。它返回一个张量,这是 收缩。语法的工作原理如下:

ncon(L, v, order=None, forder=None, check_indices=True):

第一个参数L是张量的列表。 第二个参数v是一个列表列表列表,L中每个张量对应一个。 每个v[i]由整数组成,每个整数都标记一个L[i]的索引。 正面标签表示要收缩的指数(总计)。 因此,如果例如v[m][i] == 2v[n][j] == 2,那么 L[m]和{}第L[n]的第j个索引将被识别和总结。 负号标记将保持自由(不受约束)的索引。在

关键字参数order是所有正标签的列表,其中 指定成对张量收缩的执行顺序。 默认情况下,它是sorted(all-positive-numbers-in-v),例如 [1,2,...]。注意,当连接两个张量的索引即将 收缩在一起,ncon同时收缩所有连接的指数 这两个张量,即使他们中的一些只是后来才出现。在

相应地,forder指定剩余空闲的顺序 索引将被置换。默认情况下是 sorted(all-negative-numbers-in-v, reverse=True), 例如[-1,-2,...]。在

如果check_indices=True(默认值),则执行检查以确保 收缩是明确的。如果不是,则使用 提供了错误的描述。在

如果语法听起来很像爱因斯坦求和,例如 通过np.einsum,那是因为它是。ncon的好处很多 张量网络已经习惯了它的语法,而且它很容易动态地 生成索引列表和收缩。在

示例

这里有几个例子,直接来自测试文件。在

矩阵乘积:

^{pr2}$

这里收缩了a的最后一个索引和{}的第一个索引。 结果是一个具有两个自由指数的张量,分别用-1-2标记。 标有-1的索引将成为结果的第一个索引。如果我们给 附加参数forder=[-2,-1]将返回转换。在

一个更复杂的例子:

b = np.random.randn(5, 3, 6, 7, 6)
c = np.random.randn(7, 2)
d = np.random.randn(8)
e = np.random.randn(8, 9)
result_ncon = ncon(
    (a, b, c, d, e), ([3, -2, 2], [2, 3, 1, 4, 1], [4, -1], [5], [5, -3])
)
result_np = np.einsum("ijk,kilml,mh,q,qp->hjp", a, b, c, d, e)
assert np.allclose(result_ncon, result_np)

{{cd32>这里没有连接,注意 和其他人一起。当收缩断开的网络时,连接的 零件总是先收缩,它们的张量积在 结束。跟踪也可以,比如这里的两个索引c。默认情况下 收缩按[1,2,3,4,5]的顺序进行。这可能不是最佳选择 在这种情况下,我们应该指定一个更好的收缩顺序作为关键字 争论。在

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

推荐PyPI第三方库


热门话题
java区块链表示   如何识别此Java框架中使用的加密技术?   java从outter jar加载一个包含所有组件的类   java如何在netty中序列化和反序列化HttpMessage或HttpContent?   java Hibernate在一定量的插入后生成负id   文件在FTP服务器上复制,而不是在java中移动   java如何在Android应用程序中使用静态对话框片段方法?   java扫描器while循环   java如何比较drools中数组列表的泛型元素?   java构建Restful服务失败CDI部署失败   java我的播放机将子弹射出90度   在Android设备中使用WiFi direct进行java数据传输   java在命令设计模式中将上下文传递给execute方法   java KeyClope TomcatAdapter:是否有“KeyClope”的替代路径。json'?   java如何将数据库中的名称放入我在另一个类中创建的JLIst中?   java Spring Mvc和MediaType for在获取rest请求的@RequestMapping中使用   java如何在应用程序运行时从包中打开文本文件?   java以Spring形式为单个对象定义POJO id   java清除gridview中的所有选定项