/** @return the i-th {@code double} value of a native array */ public native double get(long i); /** @return {@code put(0, d)} */
/** @return {@code get(array, 0, array.length)} */ public DoublePointer get(double[] array) { return get(array, 0, array.length); } /** @return {@code put(array, 0, array.length)} */
/** * Creates a double indexer to access efficiently the data of a pointer. * * @param pointer data to access via a buffer or to copy to an array * @param direct {@code true} to use a direct buffer, see {@link Indexer} for details * @return the new double indexer backed by the raw memory interface, a buffer, or an array */ public static DoubleIndexer create(final DoublePointer pointer, long[] sizes, long[] strides, boolean direct) { if (direct) { return Raw.getInstance() != null ? new DoubleRawIndexer(pointer, sizes, strides) : new DoubleBufferIndexer(pointer.asBuffer(), sizes, strides); } else { final long position = pointer.position(); double[] array = new double[(int)Math.min(pointer.limit() - position, Integer.MAX_VALUE)]; pointer.get(array); return new DoubleArrayIndexer(array, sizes, strides) { @Override public void release() { pointer.position(position).put(array); super.release(); } }; } }
/** * Returns the value at specified index. * <pre> * {@code return nativeArray[i]; } * </pre> * @param i index * @return value at i */ @DoublePrecisionVersion public double get(long i){ if(i >= this.length){ throw new ArrayIndexOutOfBoundsException( String.format("Cannot get value at %d, array is of length %d", i, this.length)); } return pointer.position(0).get(i); }
length, i, this.length)); pointer.position(i).get(destination,offset,length); return destination;
public static TemplateMatchResult fetchNextBestMatch(IplImage resultMatrix, IplImage target){ DoublePointer min = new DoublePointer(1); DoublePointer max = new DoublePointer(1); CvPoint minPoint = new CvPoint(2); CvPoint maxPoint = new CvPoint(2); opencv_core.cvMinMaxLoc(resultMatrix, min, max, minPoint, maxPoint, null); double detectionScore = max.get(0); CvPoint detectionLoc = maxPoint; TemplateMatchResult r = new TemplateMatchResult(); r.x = detectionLoc.x(); r.y = detectionLoc.y(); r.width = target.width(); r.height = target.height(); r.score = detectionScore; // Suppress returned match int xmargin = target.width()/3; int ymargin = target.height()/3; int x = detectionLoc.x(); int y = detectionLoc.y(); int x0 = Math.max(x-xmargin,0); int y0 = Math.max(y-ymargin,0); int x1 = Math.min(x+xmargin,resultMatrix.width()); // no need to blank right and bottom int y1 = Math.min(y+ymargin,resultMatrix.height()); cvRectangle(resultMatrix, cvPoint(x0, y0), cvPoint(x1-1, y1-1), cvRealScalar(0.0), CV_FILLED, 8,0); return r; }
double detectionScore = min.get(0); CvPoint detectionLoc = minPoint;
@Override protected double dnrm2(long N, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE nrm2 called"); Nd4j.getExecutioner().push(); double ret; CudaContext ctx = allocator.getFlowController().prepareAction(null, X); CublasPointer cAPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); DoublePointer resultPointer = new DoublePointer(0.0f); cublasDnrm2_v2(new cublasContext(handle), (int) N, (DoublePointer) cAPointer.getDevicePointer(), incX, resultPointer); ret = resultPointer.get(); } allocator.registerAction(ctx, null, X); return ret; }
@Override protected double dnrm2(int N, INDArray X, int incX) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE nrm2 called"); Nd4j.getExecutioner().push(); double ret; CudaContext ctx = allocator.getFlowController().prepareAction(null, X); CublasPointer cAPointer = new CublasPointer(X, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); DoublePointer resultPointer = new DoublePointer(0.0f); cublasDnrm2_v2(new cublasContext(handle), N, (DoublePointer) cAPointer.getDevicePointer(), incX, resultPointer); ret = resultPointer.get(); } allocator.registerAction(ctx, null, X); return ret; }
@Override protected double ddot(int N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE dot called"); Nd4j.getExecutioner().push(); double ret; CudaContext ctx = allocator.getFlowController().prepareAction(null, X, Y); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); DoublePointer resultPointer = new DoublePointer(0.0); cublasDdot_v2(new cublasContext(handle), N, (DoublePointer) xCPointer.getDevicePointer(), incX, (DoublePointer) yCPointer.getDevicePointer(), incY, resultPointer); ret = resultPointer.get(); } allocator.registerAction(ctx, null, X, Y); return ret; }
@Override protected double ddot(long N, INDArray X, int incX, INDArray Y, int incY) { if (Nd4j.dataType() != DataBuffer.Type.DOUBLE) logger.warn("DOUBLE dot called"); Nd4j.getExecutioner().push(); double ret; CudaContext ctx = allocator.getFlowController().prepareAction(null, X, Y); CublasPointer xCPointer = new CublasPointer(X, ctx); CublasPointer yCPointer = new CublasPointer(Y, ctx); cublasHandle_t handle = ctx.getHandle(); synchronized (handle) { cublasSetStream_v2(new cublasContext(handle), new CUstream_st(ctx.getOldStream())); DoublePointer resultPointer = new DoublePointer(0.0); cublasDdot_v2(new cublasContext(handle), (int) N, (DoublePointer) xCPointer.getDevicePointer(), incX, (DoublePointer) yCPointer.getDevicePointer(), incY, resultPointer); ret = resultPointer.get(); } allocator.registerAction(ctx, null, X, Y); return ret; }