@Override public boolean isColumnVectorOrScalar() { return isColumnVector() || isScalar(); }
@Override public boolean isRowVectorOrScalar() { return isRowVector() || isScalar(); }
@Override public boolean isVectorOrScalar() { return isVector() || isScalar(); }
@Override public Number percentileNumber(Number quantile) { if (quantile.intValue() < 0 || quantile.intValue() > 100) throw new ND4JIllegalStateException("Percentile value should be in 0...100 range"); if (isScalar()) return this.getDouble(0); INDArray sorted = Nd4j.sort(this.dup(this.ordering()), true); return getPercentile(quantile, sorted); }
@Override public long size(int dimension) { if (isScalar()) { if (dimension == 0 || dimension == 1 || dimension < 0) return (int) length; else throw new IllegalArgumentException("Illegal dimension for scalar " + dimension); } if (dimension < 0) { return shapeOf().getInt(dimension + Shape.rank(shapeInformation)); } if (dimension >= rank()) throw new IllegalArgumentException("Invalid size: cannot get size of dimension " + dimension + " for rank " + rank() + " NDArray (array shape: " + Arrays.toString(this.shape()) + ")"); return shapeOf().getInt(dimension); }
@Override public boolean equalsWithEps(Object o, double eps) { if (o == null) return false; if (!(o instanceof INDArray)) return false; INDArray n = (INDArray) o; if (this.lengthLong() != n.lengthLong()) return false; if (isScalar() && n.isScalar()) { // TODO } else if (isVector && n.isVector()) { // TODO } if (!Arrays.equals(this.shape(), n.shape())) return false; // TODO return false; }
@Override public INDArray percentile(Number quantile, int... dimension) { if (quantile.doubleValue() < 0 || quantile.doubleValue() > 100) throw new ND4JIllegalStateException("Percentile value should be in 0...100 range"); if (isScalar()) return Nd4j.scalar(this.getDouble(0)); INDArray sorted = Nd4j.getNDArrayFactory().sort(this.dup(this.ordering()), false, dimension); // there's no practical sense doing this on GPU, stride will be just size of TAD. INDArray ret = Nd4j.createUninitialized(sorted.tensorssAlongDimension(dimension)); for (int i = 0; i < ret.length(); i++) { ret.putScalar(i, getPercentile(quantile, sorted.tensorAlongDimension(i, dimension))); } return ret; }
return muli(other.getDouble(0), result); if (isScalar()) { return other.muli(getDouble(0), result);