Форум сайта python.su
1
Есть код, при выполнении которого производятся вычысления. По количеству входящих данных, ф-я пермутации генерирует много вариантов для вычисления (несколько миллионов). Эта операция (итерации всех вычыслений) длится ооочень долго. Можно как-то ускорить этот процес?
Собственно часть этого куска кода:
res = dict() amount = [i for i in range(64)] for i in permutations(amount, select): a = list() b = list() a_sred = list() b_sred = list() key = i for v_a in klass_a: for index_a in i: a.append(v_a[index_a]) a_sred.append(klass_a_sred[index_a]) for v_b in klass_b: for index_b in i: b.append(v_b[index_b]) b_sred.append(klass_b_sred[index_b]) matrix_a = matrix(a, float) - matrix(a_sred, float) matrix_b = matrix(b, float) - matrix(b_sred, float) trans_a = transpose(matrix_a) trans_b = transpose(matrix_b) multiplication_a = matrix_a * trans_a multiplication_b = matrix_b * trans_b determinant_a = linalg.det(multiplication_a) determinant_b = linalg.det(multiplication_b) mk = determinant_a + determinant_b chk = lk / mk res[key] = chk
Отредактировано Pytonist (Фев. 19, 2016 02:03:18)
Офлайн
568
Офлайн
221
Pytonist
подобные вычисления надо делать с numpy - у него (насколько я знаю) много где применяются расширения на C, плюс алгоритмы оптимизированные. Встречал высказывания что переход с самописанного питон кода на numpy дает ощутимый выигрыш
Офлайн
253
PytonistА чего тут ускорять. Насколько я понимаю оно сразу упадет, поскольку lk не определен.
Можно как-то ускорить этот процесс?
Отредактировано doza_and (Фев. 19, 2016 08:02:32)
Офлайн
1
FishHookСобственно здесь используется готовая функция itertools.permutations()
А готовые функции не подойдут?
JOHN_16numpy используется: matrix(), transpose(), linalg()
подобные вычисления надо делать с numpy
doza_andК тому моменту, когда начинается выполнение даного куска кода, в переменной “lk” и “select”, “klass_a_sred”, “klass_b_sred” уже есть значения.
Насколько я понимаю оно сразу упадет, поскольку lk не определен
Офлайн
253
doza_andЯ просто смотрю на ваш код и не понимаю.
если вы объясните что собственно пробуете посчитать
trans_a = transpose(matrix_a) trans_b = transpose(matrix_b) multiplication_a = matrix_a * trans_a multiplication_b = matrix_b * trans_b determinant_a = linalg.det(multiplication_a) determinant_b = linalg.det(multiplication_b) mk = determinant_a + determinant_b
mk = linalg.det(matrix_a)**2+linalg.det(matrix_b)**2
Офлайн