1

我必须解决一个问题,我必须为 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

如果我的输入在初始向量中具有正值 0、1、2 或 3,则一切正常。但是,我需要有这样的条件,如果向量有一个负条目 (x),则输入负条目,y{n} = 1 - convert(-(x+1))但是,当我这样做时,我得到一个达到递归限制的错误。有没有办法修复我的代码,使其可以使用负值而不产生错误?另外,有没有办法在不使用 for 或 while 循环的情况下做到这一点?谢谢

4

1 回答 1

0

您根本不需要单元格,但要回答您的问题,我建议您在循环之前处理否定项以避免任何不必要的递归所以假设我已经正确地遵循了您的代码,请遵循以下原则:

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

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

于 2013-03-12T09:19:17.407 回答