/** * Check that two array shapes are conformable. * The shapes must match exactly, except that dimensions of length 1 are ignored. * * @param shapeA shape of array 1 * @param shapeB shape of array 2 * @return true if conformable */ public static boolean conformable(int[] shapeA, int[] shapeB) { if (reducedRank(shapeA) != reducedRank(shapeB)) return false; int rankB = shapeB.length; int dimB = 0; for (int aShapeA : shapeA) { //System.out.println(dimA + " "+ dimB); //skip length 1 dimensions if (aShapeA == 1) continue; while (dimB < rankB) if (shapeB[dimB] == 1) dimB++; else break; // test same shape (NB dimB cant be > rankB due to first test) if (aShapeA != shapeB[dimB]) return false; dimB++; } return true; }
/** * Check that two array shapes are conformable. * The shapes must match exactly, except that dimensions of length 1 are ignored. * * @param shapeA shape of array 1 * @param shapeB shape of array 2 * @return true if conformable */ public static boolean conformable(int[] shapeA, int[] shapeB) { if (reducedRank(shapeA) != reducedRank(shapeB)) return false; int rankB = shapeB.length; int dimB = 0; for (int aShapeA : shapeA) { //System.out.println(dimA + " "+ dimB); //skip length 1 dimensions if (aShapeA == 1) continue; while (dimB < rankB) if (shapeB[dimB] == 1) dimB++; else break; // test same shape (NB dimB cant be > rankB due to first test) if (aShapeA != shapeB[dimB]) return false; dimB++; } return true; }
/** * Check that two array shapes are conformable. * The shapes must match exactly, except that dimensions of length 1 are ignored. * * @param shapeA shape of array 1 * @param shapeB shape of array 2 * @return true if conformable */ public static boolean conformable(int[] shapeA, int[] shapeB) { if (reducedRank(shapeA) != reducedRank(shapeB)) return false; int rankA = shapeA.length; int rankB = shapeB.length; int dimB = 0; for (int dimA = 0; dimA < rankA; dimA++) { //System.out.println(dimA + " "+ dimB); //skip length 1 dimensions if (shapeA[dimA] == 1) continue; while (dimB < rankB) if (shapeB[dimB] == 1) dimB++; else break; // test same shape (NB dimB cant be > rankB due to first test) if (shapeA[dimA] != shapeB[dimB]) return false; dimB++; } return true; }