itertools.product
приятнее, чем вложенные циклы, эстетически говоря. Но я не думаю, что это сделает ваш код намного быстрее. Мои тесты показывают, что итерация не является вашим узким местом.
>>> bigdata = numpy.arange(256 * 256 * 256 * 3 * 3).reshape(256, 256, 256, 3, 3)
>>> %timeit numpy.linalg.eigvals(bigdata[100, 100, 100, :, :])
10000 loops, best of 3: 52.6 us per loop
Так недооценивать:
>>> .000052 * 256 * 256 * 256 / 60
14.540253866666665
Это минимум 14 минут на моем компьютере, что довольно ново. Посмотрим, сколько времени займет петля ...
>>> def just_loops(N):
... for i in xrange(N):
... for j in xrange(N):
... for k in xrange(N):
... pass
...
>>> %timeit just_loops(256)
1 loops, best of 3: 350 ms per loop
На порядки меньше, как сказал DSM. Даже работа по нарезке одного массива более существенна:
>>> def slice_loops(N, data):
... for i in xrange(N):
... for j in xrange(N):
... for k in xrange(N):
... data[i, j, k, :, :]
...
>>> %timeit slice_loops(256, bigdata)
1 loops, best of 3: 33.5 s per loop