MATLAB 帮助中心
两个张量之间的张量积
自 R2022a 起
C = tensorprod(A,B,dimA,dimB)
C = tensorprod(A,B,dim)
C = tensorprod(A,B)
C = tensorprod(A,B,"all")
C = tensorprod(___,NumDimensionsA=ndimsA)
C = tensorprod(A,B,dimA,dimB) 返回张量 A 和 B 的张量积。参量 dimA 和 dimB 是指定 A 和 B 中要收缩的维度的向量。输出张量的大小是 A 的未收缩维度的大小,后跟 B 的未收缩维度的大小。
A
B
dimA
dimB
示例
C = tensorprod(A,B,dim) 指定 A 和 B 中都要收缩的相同维度。
dim
C = tensorprod(A,B) 返回张量 A 和 B 之间的外积。此语法等效于将上述语法之一与 dimA = dimB = [] 或 dim = [] 结合使用。输出张量的大小是 [size(A) size(B)]。
dimA = dimB = []
dim = []
[size(A) size(B)]
C = tensorprod(A,B,"all") 返回张量 A 和 B 之间的内积,这两个张量的大小必须相同。输出是标量。
C = tensorprod(___,NumDimensionsA=ndimsA) 可选地指定张量 A 中的维数,还可以使用上述语法中的任何输入参量组合。当 A 具有预期要传递给输出的尾部单一维度时,使用此选项。例如,tensorprod(A,B,NumDimensionsA=4) 计算张量 A 和 B 之间的外积,其中 A 总共有四个维度。
ndimsA
tensorprod(A,B,NumDimensionsA=4)
全部折叠
创建两个具有随机元素的三维张量。
A = rand(3,2,5); B = rand(2,4,5);
计算 A 和 B 的张量积,从而收缩 A 的第二个维度与 B 的第一个维度。所得张量包含 A 的未收缩维度,后跟 B 的未收缩维度。
C = tensorprod(A,B,2,1); size(C)
ans = 1×4 3 5 4 5
要在一个张量积中收缩多个维度,请将要收缩的维度指定为向量。计算 A 和 B 之间的另一个张量积,但这次收缩两个维度:
收缩 A 的第二个维度与 B 的第一个维度。
收缩 A 的第三个维度与 B 的第三个维度。
D = tensorprod(A,B,[2 3],[1 3]); size(D)
ans = 1×2 3 4
创建两个具有随机元素的四维张量。
A = rand(7,3,6,5); B = rand(9,3,4,5);
计算 A 和 B 的张量积,从而收缩每个张量的第二个和第四个维度。检查结果的大小。
C = tensorprod(A,B,[2 4]); size(C)
ans = 1×4 7 6 9 4
创建两个具有随机元素的张量。
A = rand(3,2,3); B = rand(4,4,3,3);
计算这两个张量的外积。检查结果的大小。
C = tensorprod(A,B); size(C)
ans = 1×7 3 2 3 4 4 3 3
tensorprod 将两个张量中元素的所有组合相乘,因此所得张量的大小等于 [size(A) size(B)]。
tensorprod
创建两个大小相同、具有随机元素的四维张量。
A = rand(4,4,3,2); B = rand(4,4,3,2);
计算张量的内积,指定 "all" 选项以收缩所有维度。
"all"
C = 23.6148
创建两个具有随机元素的四维张量。A 有大小为 1 的尾部维度,MATLAB® 会按照惯例忽略该维度。
A = rand(3,4,5,1); B = rand(4,5,6,7);
计算 A 和 B 的张量积,收缩 A 的第二个和第三个维度与 B 的第一个和第二个维度。由于 MATLAB 忽略 A 的尾部单一维度,所得结果只有三个维度。
C = tensorprod(A,B,[2 3],[1 2]); size(C)
ans = 1×3 3 6 7
要保留 A 中的单一维度,请使用 NumDimensionsA 选项指定 A 中的维数。现在结果有四个维度。
NumDimensionsA
D = tensorprod(A,B,[2 3],[1 2],NumDimensionsA=4); size(D)
ans = 1×4 3 1 6 7
输入张量,指定为数组。tensorprod 在计算过程中不会对复数输入进行共轭处理。如果需要共轭,请在将复数输入传递给 tensorprod 之前使用 conj(A) 或 conj(B) 对其进行共轭处理。
conj(A)
conj(B)
数据类型: single | double 复数支持: 是
single
double
A 和 B 中要收缩的维度,指定为向量。dimA 和 dimB 的长度必须相同,并成对匹配。收缩后维度的大小也必须匹配,因此 size(A,dimA) 必须等于 size(B,dimB)。
size(A,dimA)
size(B,dimB)
示例: tensorprod(A,B,[1 3],[2 4]) 收缩 A 的第一个维度与 B 的第二个维度,以及 A 的第三个维度与 B 的第四个维度。
tensorprod(A,B,[1 3],[2 4])
数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
int8
int16
int32
int64
uint8
uint16
uint32
uint64
A 和 B 中都要收缩的维度,指定为向量。收缩后维度的大小必须匹配,因此 size(A,dim) 必须等于 size(B,dim)。
size(A,dim)
size(B,dim)
示例: tensorprod(A,B,[1 3]) 收缩 A 的第一个维度与 B 的第一个维度,以及 A 的第三个维度与 B 的第三个维度。
tensorprod(A,B,[1 3])
A 中的维数,指定为标量。当 A 具有预期要传递给输出的尾部单一维度时,使用此选项。
示例: tensorprod(A,B,NumDimensionsA=4) 计算张量 A 和 B 之间的外积,其中 A 总共有四个维度。
两个张量的内积是向量的点积运算(由 dot 计算)的泛化。对张量中所有对应维度执行点积运算(相乘并求和),因此该运算返回标量值。对于此运算,张量必须具有相同的大小。
dot
例如,如果张量 U 和 V 具有相同的 n 个维度 (i, j, k, ..., n),则内积 tensorprod(U,V,"all") 由以下求和给出:
tensorprod(U,V,"all")
∑n⋯∑k∑j∑iUi,j,k,…,n∗Vi,j,k,…,n=w
张量的外积是二维矩阵的克罗内克积(由 kron 计算)的泛化。两个张量的外积将它们元素的所有组合相乘。由于张量中的任何维度都不会收缩,因此输出是一个大张量。
kron
例如,如果张量 U 具有维度 (i, j, k, ...),张量 V 具有维度 (l, m, n, ...),则外积 tensorprod(U,V) 由下式给出:
tensorprod(U,V)
Ui,j,k,…∗Vl,m,n,…=Wi,j,k,…,l,m,n,…
张量积合并内积和外积运算。您可以指定每个张量中大小相同的维度对组通过内积彼此收缩,这些维度会相乘并求和以将维度大小减小到 1。在所有指定的维度都收缩后,剩余维度会执行外积运算,将它们元素的所有组合相乘。
例如,如果张量 U 具有维度 (i, j, k),张量 V 具有维度 (i, j, m),则张量积 tensorprod(U,V,[1 2]) 将每个张量的前两个维度彼此收缩,结果具有维度 (k, m):
tensorprod(U,V,[1 2])
∑j∑iUi,j,k∗Vi,j,m=Wk,m
全部展开
tensorprod 函数完全支持 GPU 数组。要在 GPU 上运行该函数,请将输入数据指定为 gpuArray (Parallel Computing Toolbox)。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
gpuArray
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
在 R2022a 中推出
kron | dot | mtimes | pagemtimes
mtimes
pagemtimes
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处