private int[] createHiddenDimensions(int[] newAxis) { if (newAxis == null || newAxis.length == 0) { return hiddenDimensions(); } if (getNumHiddenDimension() == 0) { return newAxis; } int size = newAxis.length + hiddenDimensions().length; int[] newHiddenDim = new int[size]; int newDim = 0; int actualArrayIdx = 0; for (int oldDim = 0; oldDim < getNumHiddenDimension(); oldDim++) { while ((newDim < newAxis.length) && (oldDim >=getNumHiddenDimension() || newAxis[newDim] <= hiddenDimensions()[oldDim])) { newHiddenDim[actualArrayIdx] = newAxis[newDim] + oldDim; actualArrayIdx++; newDim++; } newHiddenDim[actualArrayIdx] = hiddenDimensions()[oldDim] + newDim; actualArrayIdx++; } return newHiddenDim; }
public int[] translateToPhysical(int[] virtualIndexes) { int[] physicalIndexes = new int[underlyingRank()]; int idxPhy = 0; int hidden = 0; for (int idxVir = 0; idxVir < virtualIndexes.length; idxVir++) { if (hidden < getNumHiddenDimension() && hiddenDimensions()[hidden] == idxVir) { hidden++; } else { while (idxPhy < underlyingRank() && isDimensionFixed(idxPhy)) { physicalIndexes[idxPhy] = sparseOffsets()[idxPhy]; idxPhy++; } if (idxPhy < underlyingRank() && !isDimensionFixed(idxPhy)) { physicalIndexes[idxPhy] = sparseOffsets()[idxPhy] + virtualIndexes[idxVir]; idxPhy++; } } } return physicalIndexes; }
/** * Translate the view index to the corresponding index of the original ndarray * @param virtualIndexes the view indexes * @return the original indexes * */ public long[] translateToPhysical(long[] virtualIndexes) { long[] physicalIndexes = new long[underlyingRank()]; int idxPhy = 0; int hidden = 0; for (int idxVir = 0; idxVir < virtualIndexes.length; idxVir++) { if (hidden < getNumHiddenDimension() && hiddenDimensions()[hidden] == idxVir) { hidden++; } else { while (idxPhy < underlyingRank() && isDimensionFixed(idxPhy)) { physicalIndexes[idxPhy] = sparseOffsets()[idxPhy]; idxPhy++; } if (idxPhy < underlyingRank() && !isDimensionFixed(idxPhy)) { physicalIndexes[idxPhy] = sparseOffsets()[idxPhy] + virtualIndexes[idxVir]; idxPhy++; } } } return physicalIndexes; }