sympy张量初步:乘法和缩并

2024-01-02 09:05:25

Array

一般来说,一维数组可对应向量;二维数组对应矩阵,高维数组则对应张量。故而与高维数组相关的大部分函数,都封装在sympy.tensor中。但另一方面,数组本身是一个非常通用的数据类型,故而可以直接从sympy中导入

import sympy
from sympy import Array
a1 = Array([[1, 2], [3, 4], [5, 6]])
a1.shape    # (3,2)
a1.rank()   # 2阶张量
print(sympy.latex(a1))

a 1 = [ 1 2 3 4 5 6 ] a_1 = \left[\begin{matrix}1 & 2\\3 & 4\\5 & 6\end{matrix}\right] a1?= ?135?246? ?

由于 a 1 a_1 a1?是二阶张量,故而可以转换为矩阵

a1.tomatrix()
'''
Matrix([
[1, 2],
[3, 4],
[5, 6]])
'''

Array类型的元素也可以是符号,示例如下

from sympy.abc import x, y, z
a2 = Array([[[x, y], [z, x*z]], [[1, x*y], [1/x, x/y]]])
a2.shape    # (2,2,2)
a2.rank()   # 3阶张量
print(sympy.latex(a2))

a 2 = [ [ x y z x z ] [ 1 x y 1 x x y ] ] a_2=\left[\begin{matrix}\left[\begin{matrix}x & y\\z & x z\end{matrix}\right] & \left[\begin{matrix}1 & x y\\\frac{1}{x} & \frac{x}{y}\end{matrix}\right]\end{matrix}\right] a2?=[[xz?yxz?]?[1x1??xyyx??]?]

因为这个数组的阶数为3,所以无法调用tomatrix转换为矩阵。

乘法和缩并

回顾向量之间的运算,如果两个向量分别是行向量和列向量,且元素个数相同,那么二者相乘则有两种结局,示例如下

[ c d ] [ a b ] = [ c a c b d a d b ] [ a b ] [ c d ] = a c + b d \begin{bmatrix}c\\d\end{bmatrix}\begin{bmatrix}a&b\end{bmatrix} =\begin{bmatrix}ca&cb\\ da&db\end{bmatrix}\quad \begin{bmatrix}a&b\end{bmatrix} \begin{bmatrix}c\\d\end{bmatrix}=ac+bd [cd?][a?b?]=[cada?cbdb?][a?b?][cd?]=ac+bd

若将向量看作张量,那么前者是张量乘法,后者则是在乘法之后进行了缩并操作。在sympy中,tensorproduct即为张量乘法,tensorcontraction则为缩并

from sympy import tensorproduct, tensorcontraction
from sympy.abc import a,b,c,d
A = Array([a,b])
B = Array([c,d])
p = tensorproduct(A, B)
print(sympy.latex(p))
t = tensorcontraction(p, (0,1))
sympy.latex(t)    # ac + bd

其中,tensorcontraction的第二个参数 ( 0 , 1 ) (0,1) (0,1)表示被缩并的轴。

文章来源:https://blog.csdn.net/m0_37816922/article/details/135152016
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。