【问题标题】:Error using ==> reshape in MATLAB在 MATLAB 中使用 ==> reshape 时出错
【发布时间】:2012-07-03 08:57:13
【问题描述】:

我在重塑元胞数组时遇到问题:

w = size(im,1);                                % width size
h = size(im,2);
d = size(crossfield,3);
for pxRow = 1:h % fixed pixel row
  for pxCol = 1:w % fixed pixel column
    for pxBreadth = 1:d    
      for r = 1:h % row of distant pixel
        for c = 1:w % column of distant pixel
          for z = 1:d
 
            field(c,r,z) = crossfield(c,r,z).*rmatrix(c,r,z);                
 
          end
        end
      end
    b(i) = {field}; % filling a cell array with results. read below
    i = i+1;
    end
  end
end
 
 b = reshape(b, w, h,z);

和错误:

使用 ==> 重塑时出错

要重塑元素的数量不能改变。

其他一些可能有用的信息:

>> size(im)

ans =

    35    35

>> size(crossfield)

ans =

    35    35     3

>> size(rmatrix)

ans =

    35    35     3
>> size(w)

ans =

     1     1

我怎样才能重塑 b?

【问题讨论】:

  • 您的代码在我的机器上运行良好(当我调用reshape 时没有错误)。 i 的初始值是多少?当你在运行循环后执行size(b) 时你会看到什么?我在循环之前设置了i=1;,并在运行循环后看到b1x3675

标签: matlab reshape


【解决方案1】:

请注意,您的三个内部循环与做的效果相同

field = crossfield .* rmatrix;

并且您的三个外部循环只是将单元格数组b 的每个元素设置为相同的值。因此您的代码可以简化为:

[w h] = size(im);
d = size(crossfield,3);

b = cell(w,h,d);
b(:,:,:) = {crossfield .* rmatrix};

【讨论】:

  • 非常感谢 Chris,为我节省了一些计算/打字时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多