ターミナルで実行するのに時間がかかりすぎます。
画像圧縮のアルゴリズムを書いています。
N × N ピクセルのグレースケール画像があり各ピクセルの画素値は 0 から 255 までの整数で指定されています。
この画像を縦横それぞれ K 分の 1 (K は N の約数) の大きさに縮小することが目標で、
元の画像を K × K ピクセルのブロックに区切る。その結果、N/K × N/K 個のブロックができる。(図左)
各ブロックに対して、ブロックに含まれるピクセルの画素値の平均値 (小数点以下切り捨て) を計算する。(図中央)
各ブロックを新しい一つのピクセルと見なし、N/K × N/K ピクセルの画像を作る。
ここで、新しいピクセルの画素値は 2. で計算した平均値とする
という条件があります。
# coding: utf-8 a_str = [6,2] num_array =[76,251,15,224,89,129,90,129,102,161,14,92,78,180,218,236,47,25,96,126,138,37,59,202,43,213,30,105,29,195,132,19,14,166,106,16] for i in range(a_str[0]): second_lines = input() t = second_lines.rstrip().split() b_str = list(map(int,t)) num_array.extend(b_str) for_num =[] for i in range(a_str[0]*2): for_num.append(i*3) x=0 three_num =[] for j in range(a_str[0]*2): k = j*a_str[1] l = k+a_str[1] three_num.append(num_array[k:l]) sum_num=[] for i in range(a_str[0]*2): x =three_num[i] y = sum(x) sum_num.append(y) sum_num2=[] sum_num3=[] deci = int(a_str[0]/a_str[1]) for j in range(a_str[0]*2): if j % 2 == 0: sum_num2.append(sum_num[j]) else: sum_num3.append(sum_num[j]) ans_sum_num2=[] ans_sum_num3=[] stotal = 0 # 小計 rcount = 0 # ループカウンタ for v in sum_num2: stotal += v # 小計に加算 rcount += 1 # カウントをすすめる if rcount % 3 == 0: # 3回ごとに実行 ans_sum_num2.append(stotal) # 合計を取得 stotal = 0 # 小計をリセット for v in sum_num3: stotal += v # 小計に加算 rcount += 1 # カウントをすすめる if rcount % 3 == 0: # 3回ごとに実行 ans_sum_num3.append(stotal) # 合計を取得 stotal = 0 # 小計をリセット ans1=[] for i in range(len(ans_sum_num2)): ans1.append(int(ans_sum_num2[i]/(a_str[1]*a_str[1]))) ans2=[] for i in range(len(ans_sum_num3)): ans2.append(int(ans_sum_num3[i]/(a_str[1]*a_str[1]))) print(" ".join(map(str, ans1))) print(" ".join(map(str, ans2)))
とコードを書いて実行したところ、今実行して1時間ぐらい経つのですが、それでも全く動かないです。何がそんなにこのアルゴリズムは重くなってしまったのでしょうか?for文を沢山使っているところが間違っているのでしょうか?(しかし、同じ内容をfor文を使わないで書く書き方がわからず...)どう直せば良いのでしょうか?