現在、Project Eulerというサイトの問題(問題13)を解いています。問題は、5000個のランダムの整数の和の最初の10桁を求めるというものです。
##これまでやってみたこと
Pythonを使って一行ずつ文字列として読み込んで、それを整数を要素とするリストに変換して、for文でループを回して和を求めてほしい桁をスライスで取ろうと考えましたが、5000個の和を求めるところで(当然ですが)、スピードが遅くなってしまうようです。
そこでnumpyのsum関数が使えないかと考えたのですが、どうもうまくいきません。それ以外にも手を加えると、文字列から整数への変換等の処理が増えてしまうと考えられ、速度を落とすことができません。
Python
1import numpy as np 2def sample5000_read(): 3 number_line = [] 4 sample_5000 = open('sample5000.txt','rt') 5 number_line = sample_5000.read() 6 sample_5000.close() 7 number_line = number_line.replace('\n','') 8 return list(str(number_line)) 9 10def number_list(): 11 number_list=[] 12 number_list = [int(sample5000_read()[i]) for i in range(len(sample5000_read()))] 13 return np.array(number_list) 14 15if __name__=='__main__': 16 print(number_list().sum())
sample5000.txtにはウェブサイトそのままのデータがテキストファイルに入っています。100行x50列
##ほしいアドバイス
Pythonのリスト機能を使わずに、速度を上げたいと考えています。基本的にはnumpyを使って処理したいと考えているので、numpyのライブラリでこうすればいいのではないかというところがあれば教えていただきたいです。また、Python初心者なので、コードの改善点や、その他のライブラリでも役に立ちそうなのがあれば、ぜひ教えていただけると大変光栄です。
以上よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/04/04 16:25
退会済みユーザー
2017/04/04 16:30