我有一个维度a
的矩阵r x c x 4 x 11
,其中r
和c
是图像的行和列。当我拿test=a(1,1,:,:)
并运行以下代码时:
test=reshape(test,[4,11]);
b_a=kron(eye(3),test);
我的b_a
维度为12 x 33
。而当我做的时候
b_a=kron(eye(3),a);
维度不是r x c x 12 x 33
,而是429 x 8580
。请帮助我纠正代码,以便获得所需的维度,即r x c x 12 x 33
。
答案 0 :(得分:0)
这是因为kron
已经在其参数中重构了矩阵,并且没有进一步检查(假定为2D)。从kron.m
完整矩阵我们可以看到问题:
[ma,na] = size(A);
[mb,nb] = size(B);
A = reshape(A,[1 ma 1 na]);
B = reshape(B,[mb 1 nb 1]);
K = reshape(bsxfun(@times,A,B),[ma*mb na*nb]);
第一个size
部分是有问题的部分(通常使用matlab语法)。这里nargout
造成了麻烦。我们来看看
a = rand(10,5,4,11);
[ma,na] = size(a);
[ma,na,size(a)]
这将给出
>> 10 220 10 5 4 11
这意味着na
只是剩余维度的乘积。因为当输出参数不匹配时,规则是
% N > NDIMS(X), SIZE returns ones in the "extra" variables, i.e., outputs
% NDIMS(X)+1 through N.
% N < NDIMS(X), MN contains the product of the sizes of dimensions N
% through NDIMS(X).
我不知道为什么有人会这样做,但无论如何我离题了。
您可以循环播放,也可以只修改kron函数,并确保在kron
期间保留其余尺寸。