设置列向量的长度等于子矩阵的长度

时间:2015-04-02 15:02:31

标签: matlab for-loop matrix vector string-length

我试图在循环中使用convhull函数,为此我需要将矩阵分割成不同大小的子矩阵。这是我正在使用的代码:

    x1=data(:,5); % x centre location
    y1=data(:,16); % y centre location
    z1=phi*90; % phi angle value
    n=300;
    %Create regular grid across data space
    [X,Y] = meshgrid(linspace(min(x1),max(x1),n), linspace(min(y1),max(y1),n));

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%% PLOT USING SCATTER - TRYING TO ISOLATE SOME REGIONS %%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    c=z1>10 & z1 < 20;
    c=c.*1;
    j=1;
    for i=1:length(z1)
        if z1(i)< 20 && z1(i)> 10
            c(i) = 1;
        else
            c(i)= 0;
        end       
    end


    C=[c c c];
C = ~C;

elementalLengthA = cellfun('length',regexp(sprintf('%i',all(C,2)),'1+','match'));
elementalStartA = regexp(sprintf('%i',all(C,2)),'1+','start');
result = cell(length(elementalLengthA),1);



 for i = 1:length(elementalLengthA)
    result(i) = {C(elementalStartA(i):elementalStartA(i)+elementalLengthA(i)-1,:)};
    length(x1(i))=length(cell2mat(result(i)));
    length(y1(i))=length(cell2mat(result(i)));
end

我的for循环doens工作正常,我收到此错误:???下标索引必须是实数正整数或 逻辑值。

我的矩阵C是由1和0的行组成的nx3矩阵。结果(i)行I将C矩阵分成1的子矩阵。让我们说

c = [1     1     1;
     0     0     0;
     0     0     0;
     1     1     1;
     1     1     1;
     1     1     1;
     0     0     0;
     1     1     1;
     1     1     1;] 

然后

>> cell2mat(result(1))
ans =
 1     1     1

>> cell2mat(result(2))
ans =
 1     1     1
 1     1     1
 1     1     1

>> cell2mat(result(3))
ans =
 1     1     1
 1     1     1   

现在x1和y1是两个向量列nx1。我想根据C子矩阵的长度拆分它们。所以长度(x1(1))应为1,长度(x1(2))= 3,长度(x1(3))= 2,y矢量相同。 有可能吗?

编辑: 只是为了让它更清晰 例如

x1 =

     1
     2
     3
     4
     5
     6
     7
     8
     9

y1 =

     2
     4
     6
     8
    10
    12
    14
    16
    18

我希望将此作为输出:

x1(1)=[1], x1(2)=[4 5 6]' and x1(3)=[8 9]'
y1(1)=[2], y1(2)[8 10 12]' and y1(3)=[16 18]'

由于 道连

0 个答案:

没有答案