Для L oop Векторизация - поэлементно - PullRequest
0 голосов
/ 17 апреля 2020

У меня проблема с векторизацией для l oop для следующего фиктивного сценария.

a = [i+2 for i in range(5)]
b = [i**2 for i in range(5)]
c = list(range(3,8))

answer = 0

for i in range(1, 1+c):
    answer += a**i +b**i

Очевидно, что приведенная выше форма не работает, поскольку диапазон не принимает список в качестве входных данных. Для каждого элемента в c я хочу сделать следующую операцию. IE для 0-го индекса

answer = [0, 0, 0, 0, 0]
for j in range(c[0]):
    answer[0] += a[0] **j + b[0]**j

Я не уверен, какой будет наилучший подход. Дополнительная проблема (именно об этом я и думал) состоит в том, что a, b, c могут по отдельности быть плавающей или повторяемой структурой данных. Я надеюсь, что этой информации достаточно, я упростил ее, потому что фактические переменные a, b, c и для l oop logi c немного сложнее, чем показано.

1 Ответ

0 голосов
/ 17 апреля 2020

Если я правильно понял вопрос, то сработает следующее.

for ind, j in enumerate(c): # enumerate return a tuple of index and value at that index, ind, j
    answer += (a[ind] ** j) + (b[ind] ** j)

Мы можем "Pythonize" его и таким же образом создать итератор.

answer = sum([(a[ind] ** j) + (b[ind] ** j) for ind, j in enumerate(c)])

[ИЗМЕНЕНО], чтобы соответствовать новой задаче ОП:

#  Same concept as above

for ind, j in enumerate(c):
    answer[ind] += (a[ind] ** j) + (b[ind] ** j)

Версия итератора

answer= [(a[ind] ** j) + (b[ind] ** j) for ind, j in enumerate(c)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...