Цель состоит в том, чтобы сделать расчеты на одном iter
в параллельно использование builtin
sum & map
функции одновременно. Может быть, с помощью (что-то вроде) itertools
вместо классического for loops
для анализа (LARGE) данные, прибывающие через iterator
...итерация по одному списку параллельно в питоне
В одном простом примере случае, если я хочу, чтобы вычислить ilen, sum_x & sum_x_sq
:
ilen,sum_x,sum_x_sq=iterlen(iter),sum(iter),sum(map(lambda x:x*x, iter))
Но без преобразования (большой)iter
к list
(как с iter=list(iter)
)
NB Сделайте это с помощью sum & map
и без for loops
, возможно, используя модули itertools
и/или threading
?
def example_large_data(n=100000000, mean=0, std_dev=1):
for i in range(n): yield random.gauss(mean,std_dev)
- редактировать -
Будучи очень конкретны: я хороший взгляд на itertools
надеясь, что там была двойная функция как map
, которые могли бы это сделать. Например: len_x,sum_x,sum_x_sq=itertools.iterfork(iter_x,iterlen,sum,sum_sq)
Если бы я был очень конкретным: я ищу только один ответ, исходный код python для процедуры «iterfork
».
Близко связано: http://stackoverflow.com/questions/21945732/consuming-two-iterators-in-parallel – user2357112
В чем важность использования встроенной 'sum' и' map'? Любое решение будет включать в себя либо достаточно накладных расходов во время выполнения, что использование этих встроенных функций оказывает незначительное влияние на производительность, либо достаточно кода расширения C, который переписывает 'sum' и' map' будет тривиальным в сравнении. – user2357112
Согласен: возможно, это может быть сделано только в потоках, но я надеюсь, что нет, и есть какая-то питоническая функция, которую я упустил. Я хорошо смотрел на «itertools», надеясь, что есть двойная функция, такая как «карта», которая может это сделать. Например: 'len_x, sum_x, sum_x_sq = itertools.iterfork (iter_x, count, sum, sum_sq)' ... эта проблема возникла достаточно часто, и мне кажется, что мне нужен шаблон. – NevilleDNZ