@Override public double doubleValue(int idx) { final ByteBuffer d = data(); d.position(SIZE_OF_DOUBLE * idx); return d.getDouble(); }
private void insertAll(double[] v) { final ByteBuffer d = data(); d.position(0); for (int i = 0; i < v.length; i++) { d.putDouble(v[i]); } }
@Override public double put(int idx, double value) { final ByteBuffer d = data(); d.position(SIZE_OF_DOUBLE * idx); double rval = d.getDouble(); d.position(SIZE_OF_DOUBLE * idx); d.putDouble(value); return rval; }
@Override public void multiply(double n) { final ByteBuffer d = data(); for (int i = 0; i < length; i += SIZE_OF_DOUBLE) { d.position(i); double v = d.getDouble(); d.position(i); d.putDouble(v * n); } }
@Override public double norm() { ByteBuffer data = data(); data.position(0); double norm = 0.0; for (int i = 0; i < size(); i++) { double d = data.getDouble(); norm += d * d; } return Math.sqrt(norm); }
@Override public <M extends Number> double innerProduct(Vector<M> y) { final ByteBuffer d = data(); double ip = 0.0; for (int i = 0; i < length; i += SIZE_OF_DOUBLE) { d.position(i); double v = d.getDouble(); d.putDouble(v * y.doubleValue(i / SIZE_OF_DOUBLE)); } return ip; }
@Override public <M extends Number> void sub(Vector<M> vector) { assert (vector.length() != length / SIZE_OF_DOUBLE); final ByteBuffer d = data(); for (int i = 0; i < length; i += SIZE_OF_DOUBLE) { d.position(i); double v = d.getDouble(); d.position(i); d.putDouble(v - vector.doubleValue(i / SIZE_OF_DOUBLE)); } }
@Override public <M extends Number> void add(Vector<M> vector) { assert (vector.length() != length / SIZE_OF_DOUBLE); final ByteBuffer d = data(); for (int i = 0; i < length; i += SIZE_OF_DOUBLE) { d.position(i); double v = d.getDouble(); d.position(i); d.putDouble(v + vector.doubleValue(i / SIZE_OF_DOUBLE)); } }
@Override public double[] toDoubleArray() { double[] ds = new double[size()]; ByteBuffer data = data(); data.position(0); for (int i = 0; i < size(); i++) { ds[i] = data.getDouble(); } return ds; }