Skip to content

Instantly share code, notes, and snippets.

@keuv-grvl
Last active September 24, 2020 09:56
Show Gist options
  • Save keuv-grvl/dd94271c790f12959f69fb059cf91fe0 to your computer and use it in GitHub Desktop.
Save keuv-grvl/dd94271c790f12959f69fb059cf91fe0 to your computer and use it in GitHub Desktop.
def perfboxplot(
setup,
kernels,
labels,
n=3,
xlabel="Performances",
equality_check=None,
save_path=None,
log_scale=True,
):
"""
Run perf test for a list of kernels, print as a boxplot then return data.
"""
import pandas as pd
from perfplot import bench
import matplotlib
matplotlib.style.use("seaborn")
pp = bench(
n_range=range(n),
setup=setup,
kernels=kernels,
labels=labels,
xlabel=xlabel,
equality_check=equality_check, # skip equality check if None
)
D = pd.DataFrame(zip(np.repeat(pp.labels, n), pp.timings.flatten()), columns=["Kernel", "Time"])
if save_path is not None:
fig = D.boxplot(by="Kernel").get_figure()
if log_scale:
fig.axes[-1].set_yscale("log")
fig.savefig(save_path)
return D
if __name__ == "__main__":
import numpy as np
import math
setup = lambda n: np.array([10.0, 10.0])
kernels = [
lambda v: math.atan2(v[0], v[1]) * 180 / np.pi,
lambda v: np.angle(v[0] + v[1] * 1j, deg=True),
lambda v: np.arctan2(v[1], v[0]) * 180 / np.pi,
lambda v: np.rad2deg(np.arctan2(v[1], v[0])),
]
labels = ["math.atan2", "np.angle", "np.arctan", "np.rad2deg"]
perfboxplot(setup, kernels, labels, save_path="fig.png")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment