在Python中评估einsum表达式的最低成本收缩顺序

在Python中评估einsum表达式的最低成本收缩顺序

要获得einsum表达式的最低成本收缩顺序,请使用Python中的numpy.einsum+path()方法。第一个参数subscripts指定求和的下标。第二个参数operands是操作的数组。

使用爱因斯坦求和约定,许多常见的多维线性代数数组运算可以以简单的方式表示。在隐式模式下,einsum计算这些值。

在显式模式下,einsum提供了进一步的灵活性,可以计算其他可能不被认为是经典的爱因斯坦求和操作的数组运算,通过禁用或强制对指定的下标标签进行求和。

生成的路径指示应首先收缩输入收缩的哪些项,然后将此收缩的结果附加到收缩列表的末尾。然后可以迭代此列表,直到所有中间收缩完成为止。

步骤

首先,导入所需的库 –

import numpy as np

张量 –

p = np.random.rand(2, 2)
q = np.random.rand(2, 5)
r = np.random.rand(5, 2)

为了获得一个求和表达式的最低成本缩减顺序,可以使用numpy.einsum+path()方法 –

path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy')

显示路径信息 −

print(path_info[0])
print(path_info[1])

示例

import numpy as np
np.random.seed(123)

# Tensors
p = np.random.rand(2, 2)
q = np.random.rand(2, 5)
r = np.random.rand(5, 2)

# To get the lowest cost contraction order for an einsum expression, use the numpy.einsum+path() method in Python
path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy')

# Displaying Path info
print(path_info[0])
print(path_info[1])

输出

['einsum_path', (1, 2), (0, 1)]
  Complete contraction:  ij,jk,kl->il
         Naive scaling:  4
     Optimized scaling:  3
      Naive FLOP count:  1.200e+02
  Optimized FLOP count:  5.700e+01
   Theoretical speedup:  2.105
  Largest intermediate:  4.000e+00 elements
--------------------------------------------------------------------------
scaling                 current                   remaining
--------------------------------------------------------------------------
   3                 kl,jk->jl                  ij,jl->il
   3                 jl,ij->il                     il->il

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程