У меня есть Numpy массив размераперебрать все парные комбинации Numpy столбцов массива
arr.size = (200, 600, 20).
Я хочу, чтобы вычислить scipy.stats.kendalltau
на каждом парном сочетании двух последних измерений. Например:
kendalltau(arr[:, 0, 0], arr[:, 1, 0])
kendalltau(arr[:, 0, 0], arr[:, 1, 1])
kendalltau(arr[:, 0, 0], arr[:, 1, 2])
...
kendalltau(arr[:, 0, 0], arr[:, 2, 0])
kendalltau(arr[:, 0, 0], arr[:, 2, 1])
kendalltau(arr[:, 0, 0], arr[:, 2, 2])
...
...
kendalltau(arr[:, 598, 20], arr[:, 599, 20])
таким образом, что я охватить все комбинации arr[:, i, xi]
с arr[:, j, xj]
с i < j
и xi in [0,20)
, xj in [0, 20)
. Это (600 choose 2) * 400
индивидуальных расчетов, но так как каждый занимает около 0.002 s
на моей машине, это не должно занимать много времени, чем один день с мультипроцессорным модулем.
Каков наилучший способ перебора этих столбцов (с i<j
)? Я полагаю, что мне следует избегать чего-то вроде
for i in range(600):
for j in range(i+1, 600):
for xi in range(20):
for xj in range(20):
Какой самый беспутный способ сделать это?
Редактировать: Я изменил название с тех пор, как Кендалл Тау не очень важен для вопроса. Я понимаю, что я мог бы также сделать что-то вроде
import itertools as it
for i, j in it.combinations(xrange(600), 2):
for xi, xj in product(xrange(20), xrange(20)):
но должен быть лучший, более векторный способ с numpy.
Вы хотите изучить рекурсию. На это ответили Java: http://stackoverflow.com/questions/426878/is-there-any-way-to-do-n-level-nested-loops-in-java –
Я не думаю, что рекурсия будет используйте 'numpy', как это предполагается использовать. – wflynny
Почему вы думаете, что numpy нельзя использовать с рекурсией? –