【问题标题】:Assignment has more non-singleton rhs dimensions than non-singleton subscripts赋值比非单子下标有更多的非单子右轴维度
【发布时间】:2017-02-27 17:31:57
【问题描述】:

大家好,我正在编写一个 matlab 代码,当我编写这个程序时,它会向我打印一条错误消息,提示“作业的非单件右轴维度比非单件下标更多”有人可以帮助我吗?

%% INITIALIZATION

% Size of matrix A [rows, cols]
[ma, na] = size(A);

% Size of matrix B [rows, cols]
[mb, nb] = size(B);

% Create matrix C all zeros
C = zeros(ma+mb-1, na+nb-1);
[mc, nc] = size(C);


% Create matrix T.
T = [mb-1, nb-1];


% Add mb-1 rows of zeros up and down matrix A
% Add nb-1 cols of zeros left and right matrix A
padA = padarray(A, [mb-1 nb-1]);


% flip matrix B on both directions
flipB = flip(flip(B, 1), 2);

%% CONVOLUTION

for i = 1 : mb
    for j = 1 : nb
        for x = 1 : mc
           for z = 1 : nc

                  T(i+x-1,j+z-1) = flipB(i,j) * padA;
                  C(x,z) = C(x,z) + T(i+x-1,j+z-1);

            end
        end
    end  
end


end

【问题讨论】:

  • 在哪一行?!?!
  • in T(i+x-1,j+z-1) = flipB(i,j) * padA;
  • 什么是size(flipB(i,j)*padA
  • flipB = [3,3] 并且 padA 是 A 的 padArray,即 256x256
  • 不,不是每个的大小,而是结果的大小。

标签: matlab


【解决方案1】:

错误来自以下行:

T(i+x-1,j+z-1) = flipB(i,j) * padA;

本质上,T(i+x-1,j+z-1)flipB(i,j) * padA 的大小不同。您可以通过插入size 函数来调试它以在循环迭代期间打印大小。例如:

size(T(i+x-1,j+z-1))
size(flipB(i,j) * padA)

一旦等号的rhslhs 的大小相同,错误就会消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2013-07-03
    相关资源
    最近更新 更多