如何清理/修复单元格数组MATLAB代码的映射,使我不会达到递归限制?

如何清理/修复单元格数组MATLAB代码的映射,使我不会达到递归限制?,matlab,for-loop,cell-array,Matlab,For Loop,Cell Array,我必须解决一个问题,在这个问题中,我必须为ex[1 2 3]取一个向量,并使用一个表来映射它,使得1=[1 1],2=[4 6 8],3=[6 9 12 15](实际问题的一个较短示例) 因此,我的理想功能是: convert([1 2 3])=[1 1 4 6 8 6 9 12 15] 我的思考过程是,我必须首先将向量设置为单元格数组,这样我就可以将值替换为其他不同维度的值,然后将单元格数组转换回向量/矩阵。 这就是我目前所拥有的 y = num2cell(x); for n = 1:len

我必须解决一个问题,在这个问题中,我必须为ex[1 2 3]取一个向量,并使用一个表来映射它,使得1=[1 1],2=[4 6 8],3=[6 9 12 15](实际问题的一个较短示例) 因此,我的理想功能是:
convert([1 2 3])=[1 1 4 6 8 6 9 12 15]

我的思考过程是,我必须首先将向量设置为单元格数组,这样我就可以将值替换为其他不同维度的值,然后将单元格数组转换回向量/矩阵。 这就是我目前所拥有的

y = num2cell(x);

for n = 1:length(x)
    if y{n} == 0
        y{n} = [0 2];
    elseif y{n} == 1
        y{n}= [1 1];
    elseif y{n} == 2
        y{n} = [4 6 8];
    elseif y{n} == 3
        y{n} = [6 9 12 15];

    elseif y{n} < 0
        y{n} = 1 - convert(-(x+1));
    end
    output = cell2mat(y);
end
end
y=num2单元(x);
对于n=1:长度(x)
如果y{n}==0
y{n}=[02];
elseif y{n}==1
y{n}=[11];
elseif y{n}==2
y{n}=[4 6 8];
elseif y{n}==3
y{n}=[6 9 12 15];
elseif y{n}<0
y{n}=1-转换(-(x+1));
结束
输出=cell2mat(y);
结束
结束
如果我的输入在初始向量中具有0、1、2或3的正值,则一切正常。然而,我需要有这样一个条件,如果向量有一个负项(x),那么负项被输入,使得
y{n}=1-convert(-(x+1))
然而,当我这样做时,我得到了一个达到递归极限的错误。
有没有一种方法可以修复我的代码,这样它就可以处理负值而不会产生错误?还有,有没有一种不使用for或while循环的方法?谢谢

您根本不需要单元格,但为了回答您的问题,我建议您在循环之前先处理否定项,以避免任何也不必要的递归。因此,假设我正确地遵循了您的代码,请遵循以下内容:

negs = x < 0;
x(negs) = -(x(negs) + 1)

y = num2cell(x);

for n = 1:length(x)
    if y{n} == 0
        y{n} = [0 2];
    elseif y{n} == 1
        y{n}= [1 1];
    elseif y{n} == 2
        y{n} = [4 6 8];
    elseif y{n} == 3
        y{n} = [6 9 12 15];
    end

    if negs(n)
        y{n} = 1 - x;
    end
    output = cell2mat(y);
    end
end
negs=x<0;
x(负的)=-(x(负的)+1)
y=num2单元(x);
对于n=1:长度(x)
如果y{n}==0
y{n}=[02];
elseif y{n}==1
y{n}=[11];
elseif y{n}==2
y{n}=[4 6 8];
elseif y{n}==3
y{n}=[6 9 12 15];
结束
如果为负(n)
y{n}=1-x;
结束
输出=cell2mat(y);
结束
结束

顺便说一句,我觉得这行
y{n}=1-x
实际上应该是
y{n}=1-x(n)
(也就是说,您的原始代码应该读为
y{n}=1-convert(-(x(n)+1));

感谢您的快速响应,我刚才尝试了您的建议,我得到了这个错误:“在赋值A(i)=B中,B和i中的元素数量必须相同。”为了澄清,向量的输出,比如说,[1 2 3-1]将是“convert”([1 2 3-1]=[1 1 4 6 8 6 9 12 15 1-1]'因为输入-1,它将是1-convert(-1+1))=1-convert(0)=1-[0 2]=[1-1]它的工作原理是不再有错误(谢谢!),但是它读取不同的数字序列,所以我猜这意味着它没有计算(1-convert(-x+1)))它实际上只是映射,就像它是转换(0)一样,它不是从1中减去那个序列。再次抱歉,我的错误,最后一个
elseif
现在应该是
if
。我认为你应该尝试重写它,而不使用单元格。而只是连接矩阵,即:
yn=[4 6 8];output=[output,yn];