python 爱因斯坦求和约定
时间: 2025-01-15 14:55:33 浏览: 24
使用 NumPy 实现爱因斯坦求和约定
在 Python 中,通过 numpy.einsum
函数可以方便地应用爱因斯坦求和约定来执行复杂的张量运算。此函数接受字符串参数作为输入,该字符串描述了要执行的操作。
基本语法
einsum
的基本调用形式如下:
np.einsum(subscripts, *operands)
其中 subscripts
是一个表示操作的子脚本字符串,而 *operands
则是要参与计算的一个或多个数组[^1]。
示例:矩阵转置
对于简单的矩阵转置来说,如果有一个形状为 (m,n) 的矩阵 A,则可以通过下面的方法得到其转置 AT:
import numpy as np
A = np.random.rand(3, 4)
AT = np.einsum('ij->ji', A)
print(AT.shape) # 输出应为 (4, 3)
示例:两个向量内积
给定两个相同长度的一维向量 u 和 v ,它们之间标准意义上的点积可以用 einsum 表达式 'i,i' 来完成:
u = np.array([1., 2., 3.])
v = np.array([-1., 0., 1.])
dot_product = np.einsum('i,i', u, v)
print(dot_product) # 应输出 -1.*1.+0.*2.+1.*3.
示例:矩阵-向量乘法
当涉及到矩阵 M 和列向量 b 进行常规左乘时,即 Mb , 可以利用下述方式表达:
M = np.arange(9).reshape((3, 3))
b = np.array([1., 2., 3.])
result_vector = np.einsum('ij,j', M, b)
print(result_vector)
以上例子展示了如何使用 numpy.einsum
执行不同类型的张量运算,这不仅限于上述几种情况;实际上它可以处理更复杂的情形,比如批量矩阵相乘、高阶张量收缩等。
相关推荐















