1
2 package net.sf.classifier4J.vector;
3
4
5 public class VectorUtils {
6 public static int scalarProduct(int[] one, int[] two) throws IllegalArgumentException {
7 if ((one == null) || (two == null)) {
8 throw new IllegalArgumentException("Arguments cannot be null");
9 }
10
11 if (one.length != two.length) {
12 throw new IllegalArgumentException("Arguments of different length are not allowed");
13 }
14
15 int result = 0;
16 for (int i = 0; i < one.length; i++) {
17 result += one[i] * two[i];
18 }
19 return result;
20 }
21
22 public static double vectorLength(int[] vector) throws IllegalArgumentException {
23 if (vector == null) {
24 throw new IllegalArgumentException("Arguments cannot be null");
25 }
26
27 double sumOfSquares = 0d;
28 for (int i = 0; i < vector.length; i++) {
29 sumOfSquares = sumOfSquares + (vector[i] * vector[i]);
30 }
31
32 return Math.sqrt(sumOfSquares);
33 }
34
35 public static double cosineOfVectors(int[] one, int[] two) throws IllegalArgumentException {
36 if ((one == null) || (two == null)) {
37 throw new IllegalArgumentException("Arguments cannot be null");
38 }
39
40 if (one.length != two.length) {
41 throw new IllegalArgumentException("Arguments of different length are not allowed");
42 }
43 double denominater = (vectorLength(one) * vectorLength(two));
44 if (denominater == 0) {
45 return 0;
46 } else {
47 return (scalarProduct(one, two)/denominater);
48 }
49 }
50 }