Skip to content

Instantly share code, notes, and snippets.

View mthomure's full-sized avatar

Mick Thomure mthomure

  • Sony AI
  • Portland, Oregon
View GitHub Profile
@mthomure
mthomure / create_temp_dir.sh
Created November 8, 2017 02:08
Create temp dir in bash script
#!/bin/bash
# See also: https://stackoverflow.com/questions/10982911/creating-temporary-files-in-bash
# Create temporary directory.
mydir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
# Remove on exit.
trap "rm -rf $mydir" EXIT
@mthomure
mthomure / pca.clj
Last active August 3, 2020 06:31
simple PCA implementation in clojure
(ns pca
(:require [clojure.core.matrix :as m]
[clojure.core.matrix.linear :as ml]
[clojure.core.matrix.utils :as mu]
[clojure.core.matrix.stats :as ms]))
;; dependency: [net.mikera/core.matrix "0.57.0"]
(defn fit! [m & {:keys [num-components transform?]}]
(let [mean (ms/mean m) ;; per-column mean
@mthomure
mthomure / k_means.clj
Last active January 18, 2017 01:10
simple k-means in clojure
(ns k-means
(:import [org.apache.commons.math3.ml.clustering
Clusterable KMeansPlusPlusClusterer]
[org.apache.commons.math3.ml.distance EuclideanDistance]))
;; dependency: [org.apache.commons/commons-math3 "3.6.1"]
(defrecord ClusterableWrapper [x]
Clusterable
(getPoint [this] x))
@mthomure
mthomure / learn_mallet.clj
Last active January 16, 2017 20:25
First steps at clojure idiomatic wrapper for mallet
(ns learn-mallet.core
(:import [cc.mallet.optimize Optimizable$ByGradientValue
ConjugateGradient GradientAscent LimitedMemoryBFGS
OptimizerEvaluator$ByGradient]))
;; add dependency [cc.mallet/mallet "2.0.8"]
(defprotocol IProblem
;; returns map of problem's current state
(problem-state [this]))
@mthomure
mthomure / hdf5.clj
Last active May 9, 2017 15:40
Simple HDF5 reader in clojure
(ns hdf5
(:import [org.bytedeco.javacpp
DoublePointer FloatPointer
LongPointer IntPointer
ShortPointer BytePointer]
[org.bytedeco.javacpp hdf5 hdf5$H5File]))
;; Using maven dependency:
;; [org.bytedeco.javacpp-presets/hdf5-platform "1.10.0-patch1-1.3"]
@mthomure
mthomure / read-excel-stream.clj
Created January 7, 2017 01:21
Read large excel files from clojure without killing the JVM
(ns read-excel-stream
(:import [com.monitorjbl.xlsx StreamingReader]))
;; Remember to add the following maven dependency:
;; [com.monitorjbl/xlsx-streamer "1.0.1"]
;; More info here:
;; https://github.com/monitorjbl/excel-streaming-reader
(defn workbook
"Open an Excel workbook, for example in a with-open form. This is lazy, and
@mthomure
mthomure / ExampleDGELSrowmajor.clj
Created December 30, 2016 22:48
Using OpenBLAS from Clojure
;; Port of https://github.com/bytedeco/javacpp-presets/tree/master/openblas
;; Requires openblas dependency:
;; [org.bytedeco.javacpp-presets/openblas-platform "0.2.19-1.3"]
(ns ExampleDGELSrowmajor
(:import [org.bytedeco.javacpp openblas]))
(defn print-matrix-rowmajor [desc m n mat ldm]
(println "\n " desc)
(doseq [i (range m)]
(doseq [j (range n)]
@mthomure
mthomure / test_setulb.c
Last active May 25, 2017 18:13
LBFGS via JNR
#include "lbfgs.h" // see https://github.com/stephenbeckr/L-BFGS-B-C/blob/master/src/lbfgsb.h
#include <stdio.h>
int test_setulb(integer *n, integer *m, double *x, double *l,
double *u, integer *nbd, double *f,
double *g, double *factr, double *pgtol, double *wa,
integer *iwa, integer *task,
integer *iprint, integer *csave,
logical *lsave, integer *isave, double *dsave) {
printf("test_setulb()\n");
(ns getpid
(:import [jnr.ffi.types pid_t]
[jnr.ffi LibraryLoader]))
;; see https://github.com/jnr/jnr-ffi-examples/blob/master/getpid/src/main/java/getpid/Getpid.java
;; using dependency: [com.github.jnr/jnr-ffi "2.0.9"]
;; public interface LibC {
;; public @pid_t long getpid();
;; public @pid_t long getppid();
@mthomure
mthomure / fuzzy_diff.clj
Created June 14, 2016 16:38
Approximate comparison of floating-point numbers for clojure.data/diff.
(ns fuzzy-diff
"Approximate comparison of floating-point numbers for clojure.data/diff."
(:require [clojure.data :refer [Diff]]))
(def ^:dynamic *fuzz* 0)
(defn fuzzy-float-diff [a b]
(if (< (Math/abs (- a b)) *fuzz*) [nil nil a] [a b nil]))
(extend java.lang.Double