Я взглянул на исходный код dask.По сути, когда вы вызываете функции для массивов dask, он выполняет «сокращение» массива.Интуитивно это необходимо, потому что за кулисами массивы dask хранятся в виде отдельных «блоков», которые могут жить отдельно в памяти, на диске и т. Д., Но вам нужно как-то собрать их части вместе для вызовов функций.
Таким образом, время, которое вы замечаете, находится на начальном этапе выполнения сокращения.Обратите внимание, что если вы увеличите размер массива до 2М, это займет примерно столько же времени, сколько для 200. При 20М это займет всего около 1 с.
import dask.array as da
import time
# 200 case
x = da.random.binomial(1, 0.5, 200, 200)
print x.shape
s = time.time()
print "start"
if da.any(x):
e = time.time()
print 'duration = ', e-s
# duration = 0.362557172775
# 2M case
x = da.random.binomial(1, 0.5, 2000000, 2000000)
print x.shape
s = time.time()
print "start"
if da.any(x):
e = time.time()
print 'duration = ', e-s
# duration = 0.132781982422
# 20M case
x = da.random.binomial(1, 0.5, 20000000, 20000000)
print x.shape
s = time.time()
print "start"
if da.any(x):
e = time.time()
print 'duration = ', e-s
# duration = 1.08430886269
# 200M case
x = da.random.binomial(1, 0.5, 200000000, 200000000)
print x.shape
s = time.time()
print "start"
if da.any(x):
e = time.time()
print 'duration = ', e-s
# duration = 8.83682179451