1 package net.obsearch.example.vectors;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.ByteArrayOutputStream;
5 import java.io.DataInputStream;
6 import java.io.DataOutputStream;
7 import java.io.IOException;
8 import java.nio.ByteBuffer;
9 import java.nio.FloatBuffer;
10 import java.nio.IntBuffer;
11 import java.nio.ShortBuffer;
12 import java.util.Arrays;
13
14
15
16 import net.obsearch.asserts.OBAsserts;
17 import net.obsearch.constants.ByteConstants;
18 import net.obsearch.exception.OBException;
19 import net.obsearch.ob.OBFloat;
20 import net.obsearch.ob.OBInt;
21 import net.obsearch.ob.OBLong;
22 import net.obsearch.ob.OBShort;
23 import net.obsearch.utils.bytes.ByteConversion;
24
25
26 public class L1Float implements OBFloat {
27
28 private float[] vector;
29
30 public L1Float(){
31
32 }
33
34
35
36
37
38 public L1Float(float[] vector){
39 this.vector = vector;
40 }
41
42
43
44
45 public L1Float(String data)throws OBException{
46 String[] split = data.split("[ |,]");
47 vector = new float[split.length];
48
49
50 int i = 0;
51 for(String s : split){
52 vector[i] = Float.parseFloat(s);
53 i++;
54 }
55 }
56
57 @Override
58 public float distance(OBFloat object) throws OBException {
59 L1Float other = (L1Float)object;
60 int i = 0;
61 float res = 0;
62 OBAsserts.chkAssert(vector.length == other.vector.length, "Vector size mismatch");
63 while(i < vector.length){
64 res += Math.abs(vector[i] - other.vector[i]);
65 i++;
66 }
67 OBAsserts.chkAssert(res <= Long.MAX_VALUE, "max value exceeded");
68 return res;
69 }
70
71 @Override
72 public void load(byte[] input) throws OBException, IOException {
73 FloatBuffer s = ByteConversion.createByteBuffer(input).asFloatBuffer();
74 vector = new float[input.length / ByteConstants.Float.getSize()];
75 s.get(vector);
76 }
77
78
79
80
81
82
83
84
85
86 public final boolean equals(final Object object) {
87 L1Float o = (L1Float) object;
88 return Arrays.equals(vector, o.vector);
89 }
90
91
92
93 @Override
94 public byte[] store() throws OBException, IOException {
95 ByteBuffer b = ByteConversion.createByteBuffer(ByteConstants.Float.getSize() * vector.length);
96 FloatBuffer s = b.asFloatBuffer();
97 s.put(vector);
98 return b.array();
99 }
100
101 }