假设我有一个大小为A
的矩阵3-by-3
:
A = [a11, a12, a13; a21, a22, a23; a31, a32, a33];
然后我指定一个参数K
,说K
是2,那么我想要的是让A
成为
a11 0 0 a12 0 0 a13 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
a21 0 0 a22 0 0 a23 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
a31 0 0 a32 0 0 a33 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
其中,我在原始元素之间插入K
个零行和零列。
在MATLAB中有没有官方函数?
答案 0 :(得分:2)
对于方阵,A
<强>代码强>
%%// Parameter
K = 3;
[x1,y1] = meshgrid(0:size(A,1)-1,0:size(A,1)-1)
x1 = bsxfun(@times,x1,K)+1
y1 = bsxfun(@times,y1,K)+1
Anew = zeros(size(A)*K)
Anew(sub2ind(size(Anew),y1(:),x1(:)))=A
答案 1 :(得分:2)
两种替代方法
索引:
initalise out
为零,然后使用索引填写所需的元素
out=zeros(size(A)*(K+1));
out(1:K+1:end,1:K+1:end)=A
Kronecker张量产品:
生成一个矩阵以将每个元素乘以,然后使用kron
函数
temp=zeros(K+1),temp(1)=1
out=kron(A,temp)