matlab中的订阅分配维度不匹配

时间:2014-11-09 02:40:36

标签: matlab

我正在执行以下代码以获得图像与w之间的矩阵乘法。 为什么我会收到Subscripted assignment dimension mismatch错误。

[e,f] = size(outImg);    
m = zeros(e,f);    
w = [1 2 4 8; 16 32 64 128; 256 512 1024 2048; 4096 8192 16384 32768];    
for i = 1:e-3    
    for j = 1:f-3    
        I = double(outImg((i:i+3),(j:j+3)));    
        m(i,j) = I * w;    
    end     
end

1 个答案:

答案 0 :(得分:0)

这是继续我的评论,现在了解你真正追求的是什么。您打算做的是执行Iw的逐个元素乘法,然后求和矩阵中的所有元素。我逐个元素的意思是,一个矩阵中的对应值乘以另一个矩阵中的对应位置,这就是结束结果。因此,您只需将*运算符更改为.*,然后对整个矩阵求和。换句话说,这样做:

[e,f] = size(outImg);    
m = zeros(e,f);    
w = [1 2 4 8; 16 32 64 128; 256 512 1024 2048; 4096 8192 16384 32768];    
for i = 1:e-3    
    for j = 1:f-3    
        I = double(outImg((i:i+3),(j:j+3)));    
        m(i,j) = sum(sum(I .* w));    %// Change
    end     
end

请注意嵌套的sum调用。这是因为在对矩阵求和时,默认情况下,它会对每列的所有行求和,并生成包含此结果的单个行向量。如果要对矩阵中的每个值求和,则必须再次调用sum来对行向量求和,以计算矩阵的总和。现在这应该等于单个值,您不应再得到尺寸不匹配错误。

祝你好运!