rhai-sci 0.4.0

Scientific computing in the Rhai scripting language
Documentation
// The host loads a numeric CSV into `observations` (one observation per row).
// Columns are temperature, load, and measured response; see regression_workflow.rs.
let columns = transpose(mat(observations));
let predictors = horzcat(col(columns[0]), col(columns[1]));
let response = col(columns[2]);

// regress fits an intercept automatically; do not add a column of ones.
let fit = regress(predictors, response);
let linear_part = mtimes(predictors, col(fit.parameters));
let predictions = [];
let residual_values = [];
for i in 0..observations.len() {
    let prediction = fit.intercept + linear_part[i][0];
    predictions.push(prediction);
    residual_values.push(response[i][0] - prediction);
}

// Statistics consume the same column-vector representation as matrix operations.
let residuals = col(residual_values);
let result = #{
    "intercept": fit.intercept,
    "parameters": fit.parameters,
    "predictions": predictions,
    "residual_mean": mean(residuals),
    "residual_std": std(residuals),
    "rmse": sqrt(dot(residuals, residuals) / residual_values.len().to_float())
};
print(result);
result