From: Kikutani Makoto Date: 1998-10-25T08:38:04+09:00 Subject: [ruby-list:10324] Re: Speed! --C7zPtVaVf+AK4Oqc Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit えぐちさん、わたなべさん、まつもとさんの助言を加えて、 最終的に添付の形にしました。 ----- ruby 1.1c6 % time ruby floatBasic_ruby Elements = 100000, average = 14.499995 ruby floatBasic_ruby 6.41s user 0.52s system 99% cpu 6.937 total ----- perl 5.004_04 % time perl floatBasic_perl Elements = 100000, average = 14.499995 perl floatBasic_perl 6.71s user 0.06s system 85% cpu 7.929 total ----- tcl 8.0 % time tclsh8.0 floatBasic_tcl Elements = 100000, average = 14.499995 tclsh8.0 floatBasic_tcl 54.90s user 0.15s system 96% cpu 57.089 total ----- python 1.5.1 % time python floatBasic_python Elements = 100000 average = 14.499995 python floatBasic_python 58.30s user 0.15s system 98% cpu 59.137 total というわけで、perlに勝てるくらいになってしまいました。 tclは前のは7.6だったので、8.0にしたら少し速くなった。 Pythonで何とか書いたのでpython-ml-jpに結果を送ったのだけど なんか届いてないな。アドレス変更後のに送ったのに。 道場破りってか、これはあまりにPythonの書き方が悪いせいだろうから、 直してもらおうと思ったのに。 興味ないかもしれないけどこれも付けときます。 -- 人生を背負い投げ 菊谷 誠(Kikutani Makoto) kikutani@sprintmail.com --C7zPtVaVf+AK4Oqc Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=floatBasic_ruby GC.disable row = nil col_num = 0 row_ave = [] col_sum = [] rsum = 0.0 r = 0.0 f = File.open('floatData') while f.gets row = split("\t") if col_num == 0 col_num = row.size col_sum.fill(0.0, 0..col_num-1) end rsum = 0.0 0.upto(col_num - 1) do |i| r = row[i].to_f rsum += r col_sum[i] += r end row_ave << rsum / col_num end row_num = row_ave.size col_ave = [] total = 0.0 col_sum.each{|c| col_ave << c / row_num total += c } data_num = row_num * col_num printf "Elements = %d, average = %f\n", data_num, total / data_num --C7zPtVaVf+AK4Oqc Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=floatBasic_python import sys,string col_num = 0 row_num = 0 row_ave = [] for line in open("floatData", 'r').readlines(): row = string.split(line) if col_num == 0: col_num = len(row) col_sum = [0.0] * col_num for i in range(col_num): col_sum[i] = 0.0 rsum = 0.0 for i in range(len(row)): r = string.atof( row[i] ) rsum = rsum + r col_sum[i] = col_sum[i] + r row_ave = row_ave + [rsum / col_num] row_num = row_num + 1 total = 0.0 col_ave = [] for i in range(col_num): c = col_sum[i] col_ave = col_ave + [c / row_num] total = total + c data_num = row_num * col_num sys.stdout.write("Elements = %d " % data_num + "average = %f\n" % (total / data_num) + "\n") --C7zPtVaVf+AK4Oqc--