📜  numpy.einsum() 方法(1)

📅  最后修改于: 2023-12-03 14:44:49.265000             🧑  作者: Mango

Numpy的einsum()方法

numpy.einsum()方法是numpy中高级操作的核心部分。einsum()是“Einstein Summation”的缩写,是一种多线性运算,意思是对数组的某些维度执行乘法并对结果求和。einsum()在科学计算领域中应用广泛,尤其在卷积神经网络(CNN)和循环神经网络(RNN)中。

格式

numpy.einsum()方法的基本格式如下:

numpy.einsum(subscripts, *operands[, out=None, dtype=None, order='K', casting='safe', optimize=False])

该方法接受以下参数:

  • subscripts:定义了运算的顺序和要执行的操作的类型。
  • operands:包含操作数的序列
  • out:输出数组.
  • dtype:指定输出数组的类型.
  • order:指定内存布局方式(C、F、A、K).
  • casting:指定强制转换类型的方式.
  • optimize:优化计算引擎。
示例

下面我们来看一个例子,在这个例子中,我们将使用numpy.einsum()方法计算两个一维数组之间的内积。

import numpy as np

# 定义两个一维数组
a = np.array([1,2,3])
b = np.array([4,5,6])

# 计算内积
inner_product = np.einsum('i, i -> ', a, b)

print(inner_product)  # 输出结果为 32

在这个例子中,我们使用了字母i来表示数组中的索引。我们使用->来分隔subscripts列表和输出的维度。

第一个参数'i'表示,要求两个数组在第一个维度上执行乘法。

第二个参数'i'表示,要求两个数组在第二个维度上执行乘法。

最终结果会被缩减为一个标量,因此我们用一个空格表示输出维度。

操作符

运算符用于在subscripts中创建更复杂的表达式。例如,我们可以使用'...'来表示省略多个维度。'.'表示所有剩余的维度。一条完整的表达式的格式如下:

np.einsum('ijkl..., jkl..., ...lm -> im...', a, b, c)

下面是一些常见操作符的详细示例:

  • i,j->ij:外积
  • i,j->ji:反转(transpose)
  • i,i->:数组的内积
  • ...i,...i->...:沿相同维度的张量乘法
  • ij,jk->ik:矩阵乘法
总结

numpy.einsum()方法是一项强大的多线性运算,可以在科学计算中应用广泛。虽然有一些学习曲线,但熟练掌握此方法可以大大提高Numpy库的使用水平,为进一步的计算和数据处理铺平道路。