【问题标题】:Matlab matrix dimensions in this code此代码中的 Matlab 矩阵维度
【发布时间】:2016-08-25 16:08:56
【问题描述】:

C 和 nx 的尺寸是多少? Matlab 中的代码。循环为 nx 产生 49 个元素,但另一行建议 16 个? x 是尺寸为M,N 的输入图像。

function y=sri1(x)

[M,N]=size(x);
%e=zeros(M,N);
for i=1:2
   for j=1:2
      y(i:2:2*M,j:2:2*N)=x;
   end
end

T=5;
ix=[-1 -1 1 1];
iy=[-1 1 -1 1];
mx=[0 0 1 1];
my=[0 1 0 1];
cnt=1;
for i=-2:4
   for j=-2:4
      nx(cnt)=i;ny(cnt)=j;cnt=cnt+1;
  end
end
%nx=[0 1 1 0 -1 -1  0  1 2 2 0 1 -1 -1 2 2];
%ny=[0 0 1 1  0  1 -1 -1 0 1 2 2 -1  2 -1 2];

th=8;
for i=T:M-T
   for j=T:N-T
      for k=1:4
      C(:,k)=diag(x(i+ix(k)+nx,j+iy(k)+ny));
    end
      r=diag(x(i+nx,j+ny));
      s=diag(x(i+mx,j+my));
      if det(C'*C)==0|var(s)<th
         a=ones(4,1)/4;
      else
         a=inv(C'*C)*(C'*r);
         %a=fun(C,r);
      end
      y(2*i,2*j)=sum(a.*s); 
      if y(2*i,2*j)<0|y(2*i,2*j)>255
         a=ones(4,1)/4;y(2*i,2*j)=sum(a.*s);
        end
   end
end

【问题讨论】:

  • 您确定注释掉的行是正确的吗?您确定要使用i=-2j=-2 作为循环的起始值吗?
  • 这是给我的代码,不幸的是我不知道它来自哪里。
  • 那么最好为您的任务/问题编写自己的代码!
  • 您的评论表明您显然知道生成的数组的最终大小。所以我要结束这个,就像你问的那样不清楚。
  • 它不是python,for循环清楚地使用matlab语法。 ;)

标签: matlab octave


【解决方案1】:

要查找向量和矩阵的大小,我建议您查找命令size

例如:

size( C )
size( nx )

您还可以打印对象本身,或使用 MATLAB 中的调试工具来帮助确定您的程序是否正常工作。也分别查看不同的部分,例如检查 x 的指定部分的外观,以及对角线的外观。

在您的情况下,似乎 nx 正确地有 49 个条目。每个循环将运行 7 次,每个输入 -2、-1、0、1、2、3、4。

C 似乎最终为 49 x 4。每次在内循环中,矩阵的第 1 到 4 列都被设置为 的 49 x 49 部分的对角线x 矩阵。这当然是一个 49 元素长的向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多