首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个张量之间的Kronecker积

两个张量之间的Kronecker积
EN

Stack Overflow用户
提问于 2015-02-16 18:02:31
回答 2查看 891关注 0票数 2

我有两个张量:x是2乘2乘3,y也是2乘2乘3。定义张量的每个额叶是x1 x2 x3,y1,y2,y3。习或yi是2×2矩阵.如何在matlab中做x和y之间的kronecker积?我想得到的是kron(x1,y1),kron(x2,y2),kron(x3,y3)同时在matlab中没有任何循环。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-16 18:35:27

这可能是一种方法-

代码语言:javascript
复制
%// Pre-processing part
[m,n,r] = size(x) %// Get size
N = m*n %// number of elements in one 3D slice

%// ------------- PART 1: Get indices for each 3D slice

%// Get the first mxm block of kron-corresponding indices and then add to
%// each such block for the indices corresponding to the kron multiplications
%// of each iteration
a1 = bsxfun(@plus,reshape([0:N-1]*N+1,m,m),permute([0:N-1],[1 3 2]))

%// Now, a1 is a 3D array, we need to make 2D array out of it.
%// So, concatenate along rows to make it a "slimish" 2D array
a2 = reshape(permute(a1,[1 3 2]),size(a1,1)*size(a1,3),[])

%// Cut after every N rows to make it a square 2D array.
%// These are the indices for each frontal tensor of kron muliplications
slice_idx = reshape(permute(reshape(a2,N,size(a2,1)/N,[]),[1 3 2]),N,N)

%// -------------  PART 2: Get kron equivalent output

%// Perform x:(Nx1) x y:(1xN) multiplications
vals = bsxfun(@times,reshape(x,m*n,1,r),reshape(y,1,m*n,r)) %//multiplications

%// Get indices for all 3D slices and then index into those multiplications
%// with these for the final kron equivalent output
all_idx=bsxfun(@plus,slice_idx,permute([0:r-1]*m*m*n*n,[1 3 2])) %//all indices
out = vals(all_idx) %// final output of kron equivalent multiplications
票数 3
EN

Stack Overflow用户

发布于 2015-02-16 18:16:43

这适用于任意大小的xy

  1. 构建一个5D数组z。前两个维度包含xy行组合的乘积;后两个维度包含xy列组合的乘积;第五个维度是原始的第三维空间。
  2. 这个数组被重塑,首先是蚂蚁第二次,另一方面是第三和第四次,从而产生最终的结果:

代码:

代码语言:javascript
复制
z = bsxfun(@times, permute(x, [4 1 5 2 3]), permute(y, [1 4 2 5 3]));  %// step 1
z = reshape(z, size(x,1)^2, size(x,2)^2, size(x,3));                   %//step 2
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28547585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档