Как улучшить время выполнения кода Python, не меняя большую часть алгоритма? [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как улучшить время выполнения кода Python, не меняя большую часть алгоритма? [закрыто]

Сообщение Anonymous »

У меня есть этот код:

Код: Выделить всё

from functools import lru_cache

def get_horizontal_sum(pl_list: list, col: int, row: int):
S = 0
for c in range(0, col):
S = S + pl_list[c][row]

return S

@lru_cache()
def f_e(A: int, _n: int, sum_pl: int):
return (A / _n) * sum_pl

def calc(arg: list):
S = 0
sums_ = []
vals = []
e = []

filt = arg[0]
n = arg[1]
n_2 = arg[2]

sums_ =[sum(pl) for pl in filt]
all_sum = sum(sums_)

vals = [val for fl in filt for val in fl]

e = [f_e(get_horizontal_sum(filt, n, rows), all_sum, sums_[colns]) for colns in range(0, n) for rows in range(0, n_2)]

for e_, val in zip(e, vals):
if e_ != 0:
S = S + abs(val - e_) / e_

return S

def filt(n_a: int, n_b: int, cords: list):
AB = []

AB = [[0 for x in range(0, n_b)] for i in range(0, n_a)]

for cord in cords:
AB[cord[0] - 1][cord[1] - 1] = AB[cord[0] - 1][cord[1] - 1] + 1

return AB, n_a, n_b

M = 0
K = 0
N = 0
plural_A = []
plural_B = []
cords = []

line = input()
line = line.split(' ')
M = int(line[0])
K = int(line[1])
N = int(input())

for anek in range(0, N):
line = input()
line = line.split(' ')
line_data_1 = int(line[0])
line_data_2 = int(line[1])
plural_A.append(line_data_1)
plural_B.append(line_data_2)
cords.append((line_data_1, line_data_2))

print(calc(filt(max(plural_A), max(plural_B), cords)))
Пример входных данных:

Код: Выделить всё

2 3
5
2 3
1 2
1 1
1 2
2 3
Мне нужно улучшить скорость этого кода. Что мне нужно использовать?
Мне нужно минимизировать время выполнения моего кода Python.
Возможно, наличные — хороший способ решить мою проблему, но мне нужен хотя бы один другой способ сделать это.
Наконец, я хочу получить файл .py с более высокой производительностью, чем он есть.
Я НЕ МОГУ ИСПОЛЬЗОВАТЬ NUMPY и СКОМПИЛИРОВАТЬ СВОЙ КОД!!!
Мне нужен Кстати, это может сэкономить большую часть моего алгоритма, но ускорить его (мне нужно 10%).
Ввод кода — это данные для матрицы. Преобразование матрицы в вектор и в

Код: Выделить всё

for e_, val in zip(e, vals):
if e_ != 0:
S = S + abs(val - e_) / e_
вектор преобразуется в результат.
Интерпретатор должен оставаться по умолчанию.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -of-algori
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»