/** * Given an all index and * the intended indexes, return an * index array containing a combination of all elements * for slicing and overriding particular indexes where necessary * @param allIndex the index containing all elements * @param intendedIndexes the indexes specified by the user * @return the resolved indexes (containing all where nothing is specified, and the intended index * for a particular dimension otherwise) */ public static INDArrayIndex[] resolve(INDArrayIndex[] allIndex, INDArrayIndex... intendedIndexes) { int numNewAxes = numNewAxis(intendedIndexes); INDArrayIndex[] all = new INDArrayIndex[allIndex.length + numNewAxes]; Arrays.fill(all, NDArrayIndex.all()); for (int i = 0; i < allIndex.length; i++) { //collapse single length indexes in to point indexes if (i >= intendedIndexes.length) break; if (intendedIndexes[i] instanceof NDArrayIndex) { NDArrayIndex idx = (NDArrayIndex) intendedIndexes[i]; if (idx.indices.length == 1) intendedIndexes[i] = new PointIndex(idx.indices[0]); } all[i] = intendedIndexes[i]; } return all; }
/** * Check if the given indexes * over the specified array * are searching for a scalar * @param indexOver the array to index over * @param indexes the index query * @return true if the given indexes are searching * for a scalar false otherwise */ public static boolean isScalar(INDArray indexOver, INDArrayIndex... indexes) { boolean allOneLength = true; for (int i = 0; i < indexes.length; i++) { allOneLength = allOneLength && indexes[i].length() == 1; } int numNewAxes = NDArrayIndex.numNewAxis(indexes); if (allOneLength && numNewAxes == 0 && indexes.length == indexOver.rank()) return true; else if (allOneLength && indexes.length == indexOver.rank() - numNewAxes) { return allOneLength; } return allOneLength; }
int numNewAxes = NDArrayIndex.numNewAxis(indexes); if (numNewAxes >= 1 && (indexes[0].length() > 1 || indexes[0] instanceof NDArrayIndexAll)) { List<Long> newShape = new ArrayList<>();
/** * Given an all index and * the intended indexes, return an * index array containing a combination of all elements * for slicing and overriding particular indexes where necessary * @param allIndex the index containing all elements * @param intendedIndexes the indexes specified by the user * @return the resolved indexes (containing all where nothing is specified, and the intended index * for a particular dimension otherwise) */ public static INDArrayIndex[] resolve(INDArrayIndex[] allIndex, INDArrayIndex... intendedIndexes) { int numNewAxes = numNewAxis(intendedIndexes); INDArrayIndex[] all = new INDArrayIndex[allIndex.length + numNewAxes]; Arrays.fill(all, NDArrayIndex.all()); for (int i = 0; i < allIndex.length; i++) { //collapse single length indexes in to point indexes if (i >= intendedIndexes.length) break; if (intendedIndexes[i] instanceof NDArrayIndex) { NDArrayIndex idx = (NDArrayIndex) intendedIndexes[i]; if (idx.indices.length == 1) intendedIndexes[i] = new PointIndex(idx.indices[0]); } all[i] = intendedIndexes[i]; } return all; }
/** * Check if the given indexes * over the specified array * are searching for a scalar * @param indexOver the array to index over * @param indexes the index query * @return true if the given indexes are searching * for a scalar false otherwise */ public static boolean isScalar(INDArray indexOver, INDArrayIndex... indexes) { boolean allOneLength = true; for (int i = 0; i < indexes.length; i++) { allOneLength = allOneLength && indexes[i].length() == 1; } int numNewAxes = NDArrayIndex.numNewAxis(indexes); if (allOneLength && numNewAxes == 0 && indexes.length == indexOver.rank()) return true; else if (allOneLength && indexes.length == indexOver.rank() - numNewAxes) { return allOneLength; } return allOneLength; }
int numNewAxes = NDArrayIndex.numNewAxis(indexes); if (numNewAxes >= 1 && (indexes[0].length() > 1 || indexes[0] instanceof NDArrayIndexAll)) { List<Integer> newShape = new ArrayList<>();