3d和2d之间的矩阵乘法误差

时间:2014-07-15 04:28:14

标签: matlab

我正在使用2d执行3d矩阵乘法,但得到错误

[a b c] = size(im_f);
[a d]= size(H);

im_nf = zeros([a d c]);

im_nf = cellfun(@(im_f) im_f*H,mat2cell(im_f,a,b,ones(1,c)),'UniformOutput',false);
im_nf = cat(3,im_nf{:});

但它给出了错误:

??? Error using ==> mtimes
Inner matrix dimensions must agree.

Error in ==> homofil>@(im_f)im_f*H at 27

im_nf = cellfun(@(im_f) im_f*H,mat2cell(im_f,a,b,ones(1,c)),'UniformOutput',false);`???             Error using ==> mtimes
Inner matrix dimensions must agree.

Error in ==> homofil>@(im_f)im_f*H at 27
im_nf = cellfun(@(im_f) im_f*H,mat2cell(im_f,a,b,ones(1,c)),'UniformOutput',false);

homofil是文件名

im_f的尺寸为[ 307 409 3 ]

H的尺寸为[ 307 1227 ]

如何纠正此错误?

1 个答案:

答案 0 :(得分:1)

cellfun中,您试图将im_f大小[307 409]乘以大小H的{​​{1}} - 这就是为什么您有“内部矩阵尺寸”必须同意“错误。

更改[307 1227]im_f的顺序:

H

或转置im_nf = cellfun(@(im_f) H*im_f,mat2cell(im_f,a,b,ones(1,c)),'UniformOutput',false);

im_f

BTW,im_nf = cellfun(@(im_f) im_f.'*H,mat2cell(im_f,a,b,ones(1,c)),'UniformOutput',false); mat2cell的好用;)