配列 D を持つ配列 Z を計算する必要があります (インデックス作成、スライス、ブロードキャストのみを使用し、ループはありません):
D = [0, 0, 0, 0, 12, 36, 24, 24, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 36]
Z = [nan, nan, nan, nan, 12., 14.4, 15.36, 16.224, 16.224, 16.224, 16.224, 16.224, 16.224, 16.224, 16.224, 15.8016, 15.8016, 15.8016, 15.8016, 17.8214]
ルール #1: D の最初のゼロ以外の値の前 (ここではインデックス < 4) => 配列の Z 値は nan (ここではインデックス 0 から 3) に等しい
ルール 2: D の最初のゼロ以外の値 (ここではインデックス 4、値 12) => 配列 Z はそのインデックスで A の値を取得します (12)
ルール 3: ルール 2 に従い、インデックス i で D が 0 でない場合 => Z[i] = Z[i-1] + 0.1 * (D[i] - Z[i-1])
すなわち:
ind=4: D[4]=12 => Z[4]=12 (Rule#2)
ind=5: D[5]=36 => Z[5]=12 + 0.1 * (36 - 12) = 14.4
ind=6: D[6]=24 => Z[6]=14.4 + 0.1 * (24 - 14.4) = 15.36
ind=7: D[7]=24 => Z[7]=15.36 + 0.1 * (24 - 15.36) = 16.224
ルール 4: D が 0 の場合 (ここではインデックス i = 8) => Z[i] = Z[i-1]
すなわち:
ind=8: D[8]=0 => D[8]=D[7]=16.224