如何为3d矩阵预分配内存? MATLAB

时间:2015-02-07 00:23:50

标签: matlab

所以我有一个.m文件,它给我每毫秒128x14,我调用它并创建它的对象“h”。所以现在我得到这个警告,当我跳过class1,class11,class2,class22,class3,class33,class4和class44它要求我为他们预分配内存,所以我尝试搜索该选项并得到了这个。这是一个GUI应用程序。

class1(:,:,samples_output) = zeros(128, 14, size(x));

我将上面的代码放在“y”下,但是当我运行它时我得到了这个错误

Subscripted assignment dimension mismatch.

  Error in training>start_training_Callback (line
  97)
  class1(:,:,samples_output) = zeros(128, 14,
  size(x));

  Error in gui_mainfcn (line 96)
          feval(varargin{:});

  Error in training (line 42)
      gui_mainfcn(gui_State, varargin{:});

  Error in
  @(hObject,eventdata)training('start_training_Callback',hObject,eventdata,guidata(hObject))


  Error while evaluating uicontrol Callback

这是代码

x = [0;1;0;-1];
  y = [1;0;-1;0];

  h = EmotivEEG;
  h.Run;

  for k = 1:samples_output

      location={};
      s=cell(1,4);
      for a = 1:4
          location{1} = sprintf('UP');
          location{2} = sprintf('RIGHT');
          location{3} = sprintf('DOWN');
          location{4} = sprintf('LEFT');
          n = location{a};
          s(a)=strread(sprintf(n),'%s','delimiter','');
      end

      set(handles.viewer_training,'YTick',[]);
      set(handles.viewer_training,'XTick',[]);
      scatter(x,y,'filled')
      text((x-.1),(y+.2),s,'color',[1,0,0]);
      hold on;  

      for s=1:size(x)
          samples_class_text = sprintf('Samples: %s \n Class: %s',num2str(k), num2str(s));
          set(handles.current_pos,'String',samples_class_text, 'FontSize', 15);
          set(handles.viewer_training,'YTick',[]);
          set(handles.viewer_training,'XTick',[]);
          scatter(x(s),y(s),400,'MarkerFaceColor',[0 0 0]);
          drawnow;
          if s == 1
              class1(:,:,s) = h.data;
              class11(:,:,s) = h.data;
              con1 = cat(3, class1(:,:,s), class11(:,:,s));
              assignin('base','class1',con1);
          elseif s == 2
              class2(:,:,s) = h.data;
              class22(:,:,s) = h.data;
              con2 = cat(3, class2(:,:,s), class22(:,:,s));
              assignin('base','class2',con2)
          elseif s == 3
              class3(:,:,s) = h.data;
              class33(:,:,s) = h.data;
              con3 = cat(3, class3(:,:,s), class33(:,:,s));
              assignin('base','class3',con3)
          elseif s == 4
              class4(:,:,s) = h.data;
              class44(:,:,s) = h.data;
              con4 = cat(3, class4(:,:,s), class44(:,:,s));
              assignin('base','class4',con4)
          end
          pause(1);
      end
      cla;
  end
  h.delete;

谁能告诉我如何为这些类预分配内存?

提前感谢。

1 个答案:

答案 0 :(得分:2)

class1(:,:,samples_output)索引一个3d矩阵并返回它的2d切片。要预分配完整的3d矩阵,请使用:

 class1 = zeros(128, 14, numel(x));
相关问题