順位を教えてくれる関数
順位を教えてくれる関数。
データ件数に対してn^2で計算時間がかかるようなので、大きな配列への適用は難しい。
自前環境での計算時間は大体以下の通り。
# 10000個で、0.2秒
# 20000個で、0.7秒
# 30000個で、1.5秒
# 40000個で、2.7秒
プログラム
import numpy as np import random import time # 1次元配列を渡したら、その配列の中での大きい順(一番大きな値に対しては1)を返してくれる関数。 # # 10000個で、0.2秒 # 20000個で、0.7秒 # 30000個で、1.5秒 # 40000個で、2.7秒 def calc_rank(data): np_data = np.array(data) rank = [None]*len(data) for index, value in enumerate(data): rank[index] = np.sum(np_data >= value) return rank def rand_list(length): rl = [None]*length for index in range(length): rl[index] = random.randrange(0, length*2) return rl if __name__ == "__main__": # data=[0,12,53,9,31,78,40,87,84,55,20,77] length = 1000 data = rand_list(length) tic = time.time() rank = calc_rank(data) toc = time.time() print("データ件数", length) print("計算時間(秒)", toc-tic) print("計算結果抜粋") for i in range(len(data)): print("{0} {1}".format(data[i], rank[i])) if i > 5: break # 印字は邪魔なので適当にbreak
実行結果
データ件数 12 計算時間(秒) 0.0 計算結果抜粋 0 12 12 10 53 6 9 11 31 8 78 3 40 7 87 1 84 2 55 5 20 9 77 4