(defun make-usable (data) "make-usable: runs quicksort & cuts off the unneccessary class column" (adjust-array (quicksort-array data (- (array-dimension data 1) 1)) (list (array-dimension data 0) (- (array-dimension data 1) 1)))) (defun set-distance-matrix(datarray) "set-distance-matrix: Creates and returns an array representing the distances between all objects" (let ((distancearray (make-array (list (array-dimension datarray 0) (array-dimension datarray 0)) :initial-element 0)) (sum 0)) (dotimes (i (array-dimension datarray 0) distancearray) (dotimes (j (array-dimension datarray 0)) (setf sum 0) (dotimes (k (array-dimension datarray 1)) (setf sum (+ sum (expt (- (aref datarray i k) (aref datarray j k)) 2)))) (setf (aref distancearray i j) (sqrt sum)))))) (defun set-distance-matrix2 (data1 data2) "set-distance-matrix2: Creates and returns an array representing the distances between objects of two sets" (let ((distancearray (make-array (list (array-dimension data1 0) (array-dimension data2 0)) :initial-element 0)) (sum 0)) (dotimes (i (array-dimension distancearray 0) distancearray) (dotimes (j (array-dimension distancearray 1)) (setf sum 0) (dotimes (k (array-dimension data1 1)) (setf sum (+ sum (expt (- (aref data1 i k) (aref data2 j k)) 2)))) (setf (aref distancearray i j) (sqrt sum)))))) (defun reduce-dist(oldist xmatrix column) "reduce-dist:reduces the distancematrix using another magic equation" (let ((reducedist (make-array (list (array-dimension oldist 0) (array-dimension oldist 1)) :initial-element 0))) (dotimes (i (array-dimension oldist 0) reducedist) (dotimes (j (array-dimension oldist 1)) (setf (aref reducedist i j) (sqrt (- (expt (aref oldist i j) 2) (expt (- (aref xmatrix i column) (aref xmatrix j column)) 2)))) (if (complexp (aref reducedist i j)) (setf (aref reducedist i j) 0)))))) (defun dist(distmatrix a) "returns the number of the object furthest from a, according to the distmatrix" (let ((b 0) (temp 0)) (dotimes (i (array-dimension distmatrix 0) b) (cond ((> (aref distmatrix a i) temp) (setf temp (aref distmatrix a i)) (setf b i))))))