From fc3f927faeba00820a9afa2c28bd09c82e66938d Mon Sep 17 00:00:00 2001 From: yuzu-eva Date: Wed, 16 Jul 2025 21:27:48 +0200 Subject: added functions for statistics (sum, mean, standard deviation) --- .gitignore | 1 + config.org | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/.gitignore b/.gitignore index be00807..a40b78c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ image-dired/ irony/ lisp/ transient/ +url/ !lisp/rainbow-delimiters.el !lisp/rainbow-delimiters.elc diff --git a/config.org b/config.org index 50f66f8..5308bad 100644 --- a/config.org +++ b/config.org @@ -897,6 +897,70 @@ Inserts a newline above or below, like O and o in vim (message "%0.2f" (/ (- temp 32) 1.8))) #+end_src +** statistics + +#+begin_src emacs-lisp + (defun sum (lst) + "Calculate the sum of a vector." + (interactive "xEnter a vector: ") + (unless (listp lst) + (error "Input must be a vector!")) + (let ((result (if (null lst) + (progn + (message "Empty vector") + 0) + (if (null (cdr lst)) + (car lst) + (+ (car lst) (sum (cdr lst))))))) + (when (called-interactively-p 'any) + (message "Sum: %.2f" (float result))) + result)) + + (defun mean (lst) + "Calculate the mean of a vector." + (interactive "xEnter a vector: ") + (unless (listp lst) + (error "Input must be a vector!")) + (if (null lst) + (message "Mean: 0") + (let ((mean-value (/ (float (sum lst)) (length lst)))) + (message "Mean: %.2f" mean-value) + mean-value))) + + (defun sdm (x mean) + "Calculate squared difference (datapoint - mean)" + (let ((diff (- x mean))) + (expt diff 2))) + + (defun pdev (lst) + "Calculate Population Standard Deviation of a vector" + (interactive "xEnter a vector: ") + (unless (listp lst) + (error "Input must be a vector!")) + (let* ((n (length lst)) + (mean-value (mean lst)) + (squared-diffs (mapcar (lambda (x) (sdm x mean-value)) lst)) + (sum-squared-diffs (sum squared-diffs)) + (stddev (if (< n 2) + 0 + (sqrt (/ (float sum-squared-diffs) (1- n)))))) + (message "%.2f" stddev))) + + (defun sdev (lst) + "Calculate Sample Standard Deviation of a vector" + (interactive "xEnter a vector: ") + (unless (listp lst) + (error "Input must be a vector!")) + (let* ((n (length lst)) + (mean-value (mean lst)) + (squared-diffs (mapcar (lambda (x) (sdm x mean-value)) lst)) + (sum-squared-diffs (sum squared-diffs)) + (stddev (if (< n 2) + 0 + (sqrt (/ (float sum-squared-diffs) n))))) + (message "%.2f" stddev))) +#+end_src + * Custom keybinds and re-binds Some keybinds to make life easier -- cgit v1.2.3