Как создать третий вектор из двух существующих векторов с цикличностью и индексацией? - PullRequest
0 голосов
/ 11 января 2020

У меня есть два вектора (a, b) и я хочу создать третий (c) из этих двух. Все они должны иметь одинаковую длину. Если в векторе a есть ноль (0), значение вектора b с этим индексом, где a - ноль, должно суммироваться со следующими значениями до значения в векторе a равен одиннадцати (11) и затем запоминает сумму этих значений в векторе c. Остальные значения c должны быть равны нулю (0).

a=[0, 11, 0, 11, 0, 0, 0, 11]
b=[1.1, 1.1, 9, 9, 9, 6.6, 6.6, 9]

Таким образом, вектор c должен выглядеть следующим образом:

c=[0, 2.2, 0, 18, 0, 0, 0, 31.2]

Я создаю следующий код и это работает почти для этого случая, за исключением последнего значения (оно выводится как последнее значение 15.6). И мне также нужно что-то более эффективное, тогда могло бы случиться, что вектор a имеет более 3 нулей друг за другом.

for w in range(0,len(a)):
    if a[w]==0 and a[w+1]!=0:
        c[w+1]=b[w]+b[w+1]

    elif a[w]==0 and a[w+1]==0 and a[w+2]!=0:
        c[w+2]=b[w]+b[w+1]+b[w+2]

    elif a[w]==0 and a[w+1]==0 and a[w+2]==0:
        c[w+3]=b[w]+b[w+1]+b[w+2]+b[w+3]

1 Ответ

0 голосов
/ 11 января 2020

Таким образом, мы можем l oop по обоим a и b одновременно, используя zip

. Затем нам просто нужно сложить накопленные значения от b до значения в a это 11, когда мы получаем 11, тогда мы записываем накопленное значение и сбрасываем его, в противном случае пишем 0

a = [0, 11, 0, 11, 0, 0, 0, 11]
b = [1.1, 1.1, 9, 9, 9, 6.6, 6.6, 9]
culm = 0
result = []
for a_val, b_val in zip(a, b):
    culm += b_val
    if a_val == 11:
        result.append(culm)
        culm = 0
    else:
        result.append(0)

print(result) # [0, 2.2, 0, 18, 0, 0, 0, 31.2]
...