Найти - Пользователи
Полная версия: Скорость выполнения цикла
Начало » Python для новичков » Скорость выполнения цикла
1
Pytonist
Есть код, при выполнении которого производятся вычысления. По количеству входящих данных, ф-я пермутации генерирует много вариантов для вычисления (несколько миллионов). Эта операция (итерации всех вычыслений) длится ооочень долго. Можно как-то ускорить этот процес?
Собственно часть этого куска кода:
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
JOHN_16
Pytonist
подобные вычисления надо делать с numpy - у него (насколько я знаю) много где применяются расширения на C, плюс алгоритмы оптимизированные. Встречал высказывания что переход с самописанного питон кода на numpy дает ощутимый выигрыш
doza_and
Pytonist
Можно как-то ускорить этот процесс?
А чего тут ускорять. Насколько я понимаю оно сразу упадет, поскольку lk не определен.

Складывается впечатление что можно ускорить если вы объясните что собственно пробуете посчитать, то будет проще.
Pytonist
FishHook
А готовые функции не подойдут?
Собственно здесь используется готовая функция itertools.permutations()
JOHN_16
подобные вычисления надо делать с numpy
numpy используется: matrix(), transpose(), linalg()
doza_and
Насколько я понимаю оно сразу упадет, поскольку lk не определен
К тому моменту, когда начинается выполнение даного куска кода, в переменной “lk” и “select”, “klass_a_sred”, “klass_b_sred” уже есть значения.


Я читал что есть такая штука как PyPy. Кто-то использовал это, в часности с 3й версией Python?
doza_and
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
Похоже посчитали детерминанты и только их и используете. Но зачем вам тогда искать A^T.A
С первого курса любого вуза известно det(A.B)=det(A)*det(B), det(A^T)=det(A)
Т.е.
ваш код можно заменить на
    mk = linalg.det(matrix_a)**2+linalg.det(matrix_b)**2
А что вы вцелом делаете неясно. Может вообще все это не надо делать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB