Unerwartetes Verhalten für die Korrelation von Numpy/Polars bei großen Werten
Posted: 12 Mar 2025, 02:06
Sowohl für Polar als auch für Numpy scheinen Korrelationsfunktionen aufgrund sehr großer Änderungen des Ortes zu zerstören. Eine Bazillion +1 wird als gleich einer bazillion +2 angesehen. Daher ist meine Frage, wie man das am besten umgeht. Die erste Idee scheint entschärft zu sein, was natürlich den Code verlangsamt, aber zumindest sollte ich das RNG-Verhalten vermeiden. Was wäre der Standardansatz?
Code: Select all
import polars as pl
df = pl.DataFrame({
"a": [1.0, 2.0, 3.0, 1.0, 2.0, 3.0],
"b": [4.0, 3.0, 0.0, 1.0, 2.0, 0.0],
})
(df+1123000000000000000000.0).corr()
# Outputs
#shape: (2, 2)
#┌─────┬─────┐
#│ a ┆ b │
#│ --- ┆ --- │
#│ f64 ┆ f64 │
#╞═════╪═════╡
#│ 1.0 ┆ 1.0 │
#│ 1.0 ┆ 1.0 │
#└─────┴─────┘
(df+112300000000000000000.0).corr()
# Outputs
#shape: (2, 2)
#┌─────┬─────┐
#│ a ┆ b │
#│ --- ┆ --- │
#│ f64 ┆ f64 │
#╞═════╪═════╡
#│ NaN ┆ NaN │
#│ NaN ┆ NaN │
#└─────┴─────┘
(df+11230000000000000.0).corr()
# Still wrong output
#shape: (2, 2)
#┌───────────┬───────────┐
#│ a ┆ b │
#│ --- ┆ --- │
#│ f64 ┆ f64 │
#╞═══════════╪═══════════╡
#│ 1.0 ┆ -0.424264 │
#│ -0.424264 ┆ 1.0 │
#└───────────┴───────────┘
(df+1123000000000.0).corr()
# Correct output
# shape: (2, 2)
#┌───────────┬───────────┐
#│ a ┆ b │
#│ --- ┆ --- │
#│ f64 ┆ f64 │
#╞═══════════╪═══════════╡
#│ 1.0 ┆ -0.684653 │
#│ -0.684653 ┆ 1.0 │
#└───────────┴───────────┘