Sha256: fc5e007f5974a3f90209902e4d8ae647c4a56c51bd8ad7df74dd06d4f51b3685

Contents?: true

Size: 987 Bytes

Versions: 2

Compression:

Stored size: 987 Bytes

Contents

require 'pycall/import'
include PyCall::Import

require 'benchmark'
pyimport :pandas, as: :pd
pyimport :seaborn, as: :sns
pyimport 'matplotlib.pyplot', as: :plt

array = Array.new(100_000) { rand }

trials = 100
results = { method: [], runtime: [] }

# Array#sum
trials.times do
  results[:method] << 'sum'
  results[:runtime] << Benchmark.realtime { array.sum }
end

# Array#inject(:+)
trials.times do
  results[:method] << 'inject'
  results[:runtime] << Benchmark.realtime { array.inject(:+) }
end

# while
def while_sum(ary)
  sum, i, n = 0, 0, ary.length
  while i < n
    sum += ary[i]
    i += 1
  end
  sum
end

trials.times do
  results[:method] << 'while'
  results[:runtime] << Benchmark.realtime { while_sum(array) }
end

# visualization

df = pd.DataFrame.(PyCall::Dict.new(results))
sns.barplot.(x: 'method', y: 'runtime', data: df)
plt.title.("Array summation benchmark (#{trials} trials)")
plt.xlabel.('Summation method')
plt.ylabel.('Average runtime [sec]')
plt.show.()

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pycall-0.1.0.alpha.20170224b examples/sum_benchmarking.rb
pycall-0.1.0.alpha.20170224 examples/sum_benchmarking.rb