带有switch case的matlab中的下标分配维度不匹配

时间:2014-01-22 17:42:12

标签: matlab

我有一张表,我从中提取每一列被告中最大的元素及其在表格中的位置。

Max = max(ARRAY,[],1); for i=1:1 for j=1:30 [X,Y] = find(ARRAY == Max(i,j)); Locations(i,j)=X; end end

我想得到一个表Sample_Targets (i, j) 10 * 30,其中取决于(1-10)中(Loc)(i)的值来存储在每列中的变量是type A = [1;0;0;0;0; 0;0;0;0;0];

  for i=1:1 
for j=1:30
    switch  Locations(i,j)
            case {1}
                Sample_Targets(i,j) = [1;0;0;0;0;0;0;0;0;0];
            case {2}
                Sample_Targets(i,j) = [0;1;0;0;0;0;0;0;0;0];
            case {3}
                Sample_Targets(i,j)  = [0;0;1;0;0;0;0;0;0;0];
            case {4}
                Sample_Targets(i,j)  = [0;0;0;1;0;0;0;0;0;0];
            case {5}
                Sample_Targets(i,j)  = [0;0;0;0;1;0;0;0;0;0];
            case {6}
                Sample_Targets(i,j)  = [0;0;0;0;0;1;0;0;0;0];
            case {7}
                Sample_Targets(i,j)  = [0;0;0;0;0;0;1;0;0;0];
            case {8}
                Sample_Targets(i,j)  = [0;0;0;0;0;0;0;1;0;0];
            case {9}
                Sample_Targets(i,j)  = [0;0;0;0;0;0;0;0;1;0];
            case {10}
                Sample_Targets(i,j)  = [0;0;0;0;0;0;0;0;0;1];
         end    
    end
  end

每次我收到同样的错误:

订阅的分配维度不匹配。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您的Sample_Targets变量需要是单元格类型,或者是3D数组。

  • 单元格:使用{}表示单元格下标,即Sample_Targets {i,j}

  • 3D数组:使用Sample_Targets(i,j,:) = [....];

注意,后者是唯一可能的,因为在switch语句中总是分配一个大小相同的数组。如果情况不是这样,则选项a)是唯一可能的。