long[] newShape = Longs.concat(ArrayUtil.toLongArray(ArrayUtil.nTimes(numNewAxes, 1)), arr.shape()); long[] newStrides = Longs.concat(new long[numNewAxes], arr.stride()); arr.setShape(newShape);
/** * An alias for repmat * * @param tile the ndarray to tile * @param repeat the shape to repeat * @return the tiled ndarray */ public static INDArray tile(INDArray tile, int... repeat) { int d = repeat.length; long[] shape = ArrayUtil.copy(tile.shape()); long n = Math.max(tile.length(), 1); if (d < tile.rank()) { repeat = Ints.concat(ArrayUtil.nTimes(tile.rank() - d, 1), repeat); } for (int i = 0; i < shape.length; i++) { if (repeat[i] != 1) { tile = tile.reshape(-1, n).repeat(0, new int[] {repeat[i]}); } long in = shape[i]; long nOut = in * repeat[i]; shape[i] = nOut; n /= Math.max(in, 1); } return tile.reshape(shape); }
@Override public INDArray repeat(int dimension, long... repeats) { Nd4j.getCompressor().autoDecompress(this); if (dimension < 0) dimension += rank(); if (repeats.length < rank()) { if (dimension > 0) repeats = Longs.concat(ArrayUtil.nTimes((long) rank() - repeats.length, 1), repeats); //append rather than prepend for dimension == 0 else repeats = Longs.concat(repeats, ArrayUtil.nTimes((long) rank() - repeats.length, 1)); } long[] newShape = new long[rank()]; for (int i = 0; i < newShape.length; i++) newShape[i] = size(i) * repeats[i]; INDArray ret = Nd4j.create(newShape); //number of times to repeat each value long repeatDelta = ArrayUtil.prod(newShape) / length(); for (int i = 0; i < tensorssAlongDimension(dimension); i++) { INDArray thisTensor = tensorAlongDimension(i, dimension); INDArray retTensor = ret.tensorAlongDimension(i, dimension); int retIdx = 0; for (int k = 0; k < thisTensor.length(); k++) { for (int j = 0; j < repeatDelta; j++) { retTensor.putScalar(retIdx++, thisTensor.getDouble(k)); } } } return ret; }
int[] newShape = Ints.concat(ArrayUtil.nTimes(numNewAxes, 1), arr.shape()); int[] newStrides = Ints.concat(new int[numNewAxes], arr.stride()); arr.setShape(newShape);
/** * An alias for repmat * * @param tile the ndarray to tile * @param repeat the shape to repeat * @return the tiled ndarray */ public static INDArray tile(INDArray tile, int... repeat) { int d = repeat.length; int[] shape = ArrayUtil.copy(tile.shape()); int n = Math.max(tile.length(), 1); if (d < tile.rank()) { repeat = Ints.concat(ArrayUtil.nTimes(tile.rank() - d, 1), repeat); } for (int i = 0; i < shape.length; i++) { if (repeat[i] != 1) { tile = tile.reshape(-1, n).repeat(0, new int[] {repeat[i]}); } int in = shape[i]; int nOut = in * repeat[i]; shape[i] = nOut; n /= Math.max(in, 1); } return tile.reshape(shape); }
@Override public INDArray repeat(int dimension, int... repeats) { Nd4j.getCompressor().autoDecompress(this); if (dimension < 0) dimension += rank(); if (repeats.length < rank()) { if (dimension > 0) repeats = Ints.concat(ArrayUtil.nTimes(rank() - repeats.length, 1), repeats); //append rather than prepend for dimension == 0 else repeats = Ints.concat(repeats, ArrayUtil.nTimes(rank() - repeats.length, 1)); } int[] newShape = new int[rank()]; for (int i = 0; i < newShape.length; i++) newShape[i] = size(i) * repeats[i]; INDArray ret = create(newShape); //number of times to repeat each value int repeatDelta = ArrayUtil.prod(newShape) / length(); for (int i = 0; i < tensorssAlongDimension(dimension); i++) { INDArray thisTensor = tensorAlongDimension(i, dimension); INDArray retTensor = ret.tensorAlongDimension(i, dimension); int retIdx = 0; for (int k = 0; k < thisTensor.length(); k++) { for (int j = 0; j < repeatDelta; j++) { retTensor.putScalar(retIdx++, thisTensor.getDouble(k)); } } } return ret; }