Я новичок в Джулии. Я в основном программирую на python.
В python, если вы хотите итерации по большому набору значений, типично построить так называемый генератор для экономии использования памяти. Вот пример кода:
def generator(N):
for i in range(N):
yield i
Интересно, есть ли что-то подобное в Джулии. После прочтения руководства julia, Макрос @task, похоже, имеет ту же (или аналогичную) функциональность, что и генератор в python. Однако, после некоторых экспериментов, использование памяти, по-видимому, больше, чем обычный массив в julia.
Я использую @time
в IJulia, чтобы увидеть использование памяти.
Вот мой пример кода:
[Обновить]: добавьте код для метода generator
(Метод generator
)
function generator(N::Int)
for i in 1:N
produce(i)
end
end
(версия генератора)
function fun_gener()
sum = 0
g = @task generator(100000)
for i in g
sum += i
end
sum
end
@time fun_gener()
прошедшее время: 0,420731828 секунд (выделено 6507600 байт)
(версия массива)
function fun_arry()
sum = 0
c = [1:100000]
for i in c
sum += i
end
sum
end
@time fun_arry()
прошедшее время: 0.000629629 секунд (выделено 800144 байт)
Может ли кто-нибудь сказать мне, почему @task
потребует больше места в этом случае?
И если я хочу сохранить использование памяти как дело с большим набором значений,
что я могу сделать?