/** * Meshgrid op. Returns a pair of arrays where values are broadcast on a 2d grid.<br> * For example, if x = [1,2,3,4] and y = [5,6,7], then:<br> * out[0] =<br> * [1,2,3,4]<br> * [1,2,3,4]<br> * [1,2,3,4]<br> * <br> * out[1] =<br> * [5,5,5,5]<br> * [6,6,6,6]<br> * [7,7,7,7]<br> * <br> * * @param x X array input * @param y Y array input * @return INDArray[] of length 2, shape [y.length, x.length] */ public static INDArray[] meshgrid(@NonNull INDArray x, @NonNull INDArray y){ Preconditions.checkArgument(x.isVectorOrScalar(), "X must be a vector"); Preconditions.checkArgument(y.isVectorOrScalar(), "Y must be a vector"); INDArray xOut = Nd4j.createUninitialized(y.length(), x.length()); INDArray yOut = Nd4j.createUninitialized(y.length(), x.length()); CustomOp op = DynamicCustomOp.builder("meshgrid") .addInputs(x, y) .addOutputs(xOut, yOut) .build(); Nd4j.getExecutioner().exec(op); return new INDArray[]{xOut, yOut}; }