Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中另一个IF语句中的IF条件_Matlab - Fatal编程技术网

MATLAB中另一个IF语句中的IF条件

MATLAB中另一个IF语句中的IF条件,matlab,Matlab,我在表(cumpactices)中有一个变量(Practices),具有以下值: 0 4 6 10 0 12 18 0 22 我想创建另一个变量,它必须满足以下条件: 当0时,则为0 如果不是0,则从上一行中减去该值 前一行的值为0时,从前一行(当前第2行)中减去 我可以做循环以满足前2个标准(请参见下文),但我很难解释第三个标准。有人能帮我吗 blank = cell(n,1) for i=1:height(CumPractices) if CumPractices.Practi

我在表(
cumpactices
)中有一个变量(
Practices
),具有以下值:

0 
4
6
10
0
12
18
0
22
我想创建另一个变量,它必须满足以下条件:

  • 当0时,则为0
  • 如果不是0,则从上一行中减去该值
  • 前一行的值为0时,从前一行(当前第2行)中减去
我可以做循环以满足前2个标准(请参见下文),但我很难解释第三个标准。有人能帮我吗

blank = cell(n,1)
for i=1:height(CumPractices)
   if CumPractices.Practices(i)==0
      blank{i,1} = 0
   else
       blank{i,1} = CumPractices.Practices(i)-CumPractices.Practices(i-1)  
   end
end

只需将前一个非零元素存储在变量中,并在减法中使用:

Practices = [0; 4; 6; 10; 0; 12; 18; 0; 22];

blank = cell(size(Practices, 1),1);
prevNonZero = 0;
for i = 1:size(Practices, 1)
   if Practices(i)==0
      blank{i,1} = 0;
   else
       blank{i,1} = Practices(i) - prevNonZero;
       prevNonZero = Practices(i);
   end
end
输出

或者,如果您希望将上一行的值减去(由于您的示例,我感到困惑),则可以将循环修改为:

for i = 1:size(Practices, 1)
    if Practices(i) == 0
        blank{i,1} = 0;
    else
        if prevNonZero ~= 0
            blank{i,1} = prevNonZero - Practices(i);
        else
            blank{i,1} = Practices(i);
        end
        prevNonZero = Practices(i);
    end
end
它将从之前的非零元素(如果有)中减去

输出为:


注意:我稍微重命名了变量,但这与解决方案无关。

Use?这些都在文档中…可以有2个(或更多)零吗?所以你必须找到通透的非零,还是如果(i-1)==0,那么(i-2)哦,是的,可能有2个或更多的零,所以这比我想的更复杂。。。我需要找到以前的非零。你知道怎么做吗?非常感谢。
for i = 1:size(Practices, 1)
    if Practices(i) == 0
        blank{i,1} = 0;
    else
        if prevNonZero ~= 0
            blank{i,1} = prevNonZero - Practices(i);
        else
            blank{i,1} = Practices(i);
        end
        prevNonZero = Practices(i);
    end
end
>> blank'

ans =  [0]    [4]    [-2]    [-4]    [0]    [-2]    [-6]    [0]    [-4]