diff options
| author | yuzu-eva <cafebabe@disroot.org> | 2025-07-16 21:27:48 +0200 |
|---|---|---|
| committer | yuzu-eva <cafebabe@disroot.org> | 2025-07-16 21:27:48 +0200 |
| commit | fc3f927faeba00820a9afa2c28bd09c82e66938d (patch) | |
| tree | b6fe187626a8a4e9929da8377f36ce7ea6d0aea4 | |
| parent | 9c5e686e43246e6ea23901a6e769fd4faa1095ba (diff) | |
added functions for statistics (sum, mean, standard deviation)
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | config.org | 64 |
2 files changed, 65 insertions, 0 deletions
@@ -21,6 +21,7 @@ image-dired/ irony/ lisp/ transient/ +url/ !lisp/rainbow-delimiters.el !lisp/rainbow-delimiters.elc @@ -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 |
