Skip to content

Commit b14e079

Browse files
authored
Merge pull request #268 from githubnext/autoloop/perf-comparison
[Autoloop: perf-comparison]
2 parents 5db2adf + 26d6bca commit b14e079

4 files changed

Lines changed: 170 additions & 0 deletions

File tree

benchmarks/pandas/bench_dropna.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""
2+
Benchmark: dropna on Series and DataFrame (axis=0, how=any, how=all)
3+
"""
4+
import json
5+
import time
6+
import numpy as np
7+
import pandas as pd
8+
9+
ROWS = 100_000
10+
WARMUP = 3
11+
ITERATIONS = 10
12+
13+
rng = np.random.default_rng(42)
14+
series_data = rng.standard_normal(ROWS)
15+
series_data[::10] = np.nan
16+
s = pd.Series(series_data)
17+
18+
col_a = rng.standard_normal(ROWS)
19+
col_b = rng.standard_normal(ROWS)
20+
col_c = rng.standard_normal(ROWS)
21+
col_a[::7] = np.nan
22+
col_b[::11] = np.nan
23+
col_c[::13] = np.nan
24+
df = pd.DataFrame({"a": col_a, "b": col_b, "c": col_c})
25+
26+
for _ in range(WARMUP):
27+
s.dropna()
28+
df.dropna(how="any")
29+
df.dropna(how="all")
30+
31+
start = time.perf_counter()
32+
for _ in range(ITERATIONS):
33+
s.dropna()
34+
df.dropna(how="any")
35+
df.dropna(how="all")
36+
total = (time.perf_counter() - start) * 1000
37+
38+
print(json.dumps({
39+
"function": "dropna",
40+
"mean_ms": total / ITERATIONS,
41+
"iterations": ITERATIONS,
42+
"total_ms": total,
43+
}))

benchmarks/pandas/bench_fillna.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""
2+
Benchmark: fillna on Series and DataFrame (scalar, ffill, bfill)
3+
"""
4+
import json
5+
import time
6+
import numpy as np
7+
import pandas as pd
8+
9+
ROWS = 100_000
10+
WARMUP = 3
11+
ITERATIONS = 10
12+
13+
rng = np.random.default_rng(42)
14+
series_data = rng.standard_normal(ROWS)
15+
series_data[::10] = np.nan
16+
s = pd.Series(series_data)
17+
18+
col_a = rng.standard_normal(ROWS)
19+
col_b = rng.standard_normal(ROWS)
20+
col_a[::7] = np.nan
21+
col_b[::11] = np.nan
22+
df = pd.DataFrame({"a": col_a, "b": col_b})
23+
24+
for _ in range(WARMUP):
25+
s.fillna(0)
26+
s.ffill()
27+
df.fillna(0)
28+
df.bfill()
29+
30+
start = time.perf_counter()
31+
for _ in range(ITERATIONS):
32+
s.fillna(0)
33+
s.ffill()
34+
df.fillna(0)
35+
df.bfill()
36+
total = (time.perf_counter() - start) * 1000
37+
38+
print(json.dumps({
39+
"function": "fillna",
40+
"mean_ms": total / ITERATIONS,
41+
"iterations": ITERATIONS,
42+
"total_ms": total,
43+
}))

benchmarks/tsb/bench_dropna.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Benchmark: dropna on Series and DataFrame (axis=0 and axis=1)
3+
*/
4+
import { Series, DataFrame, dropna, dropnaDataFrame } from "../../src/index.js";
5+
6+
const ROWS = 100_000;
7+
const WARMUP = 3;
8+
const ITERATIONS = 10;
9+
10+
// ~10% missing values
11+
const seriesData = Float64Array.from({ length: ROWS }, (_, i) =>
12+
i % 10 === 0 ? NaN : i * 1.1,
13+
);
14+
const s = new Series(seriesData);
15+
16+
const colA = Float64Array.from({ length: ROWS }, (_, i) => (i % 7 === 0 ? NaN : i * 0.5));
17+
const colB = Float64Array.from({ length: ROWS }, (_, i) => (i % 11 === 0 ? NaN : i * 1.5));
18+
const colC = Float64Array.from({ length: ROWS }, (_, i) => (i % 13 === 0 ? NaN : i * 2.0));
19+
const df = DataFrame.fromColumns({ a: colA, b: colB, c: colC });
20+
21+
for (let i = 0; i < WARMUP; i++) {
22+
dropna(s);
23+
dropnaDataFrame(df, { how: "any" });
24+
dropnaDataFrame(df, { how: "all" });
25+
}
26+
27+
const start = performance.now();
28+
for (let i = 0; i < ITERATIONS; i++) {
29+
dropna(s);
30+
dropnaDataFrame(df, { how: "any" });
31+
dropnaDataFrame(df, { how: "all" });
32+
}
33+
const total = performance.now() - start;
34+
35+
console.log(
36+
JSON.stringify({
37+
function: "dropna",
38+
mean_ms: total / ITERATIONS,
39+
iterations: ITERATIONS,
40+
total_ms: total,
41+
}),
42+
);

benchmarks/tsb/bench_fillna.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Benchmark: fillna on Series and DataFrame (scalar, ffill, bfill)
3+
*/
4+
import { Series, DataFrame, fillnaSeries, fillnaDataFrame } from "../../src/index.js";
5+
6+
const ROWS = 100_000;
7+
const WARMUP = 3;
8+
const ITERATIONS = 10;
9+
10+
const seriesData = Float64Array.from({ length: ROWS }, (_, i) =>
11+
i % 10 === 0 ? NaN : i * 1.1,
12+
);
13+
const s = new Series(seriesData);
14+
15+
const colA = Float64Array.from({ length: ROWS }, (_, i) => (i % 7 === 0 ? NaN : i * 0.5));
16+
const colB = Float64Array.from({ length: ROWS }, (_, i) => (i % 11 === 0 ? NaN : i * 1.5));
17+
const df = DataFrame.fromColumns({ a: colA, b: colB });
18+
19+
for (let i = 0; i < WARMUP; i++) {
20+
fillnaSeries(s, { value: 0 });
21+
fillnaSeries(s, { method: "ffill" });
22+
fillnaDataFrame(df, { value: 0 });
23+
fillnaDataFrame(df, { method: "bfill" });
24+
}
25+
26+
const start = performance.now();
27+
for (let i = 0; i < ITERATIONS; i++) {
28+
fillnaSeries(s, { value: 0 });
29+
fillnaSeries(s, { method: "ffill" });
30+
fillnaDataFrame(df, { value: 0 });
31+
fillnaDataFrame(df, { method: "bfill" });
32+
}
33+
const total = performance.now() - start;
34+
35+
console.log(
36+
JSON.stringify({
37+
function: "fillna",
38+
mean_ms: total / ITERATIONS,
39+
iterations: ITERATIONS,
40+
total_ms: total,
41+
}),
42+
);

0 commit comments

Comments
 (0)