private void multiplyAndStackUV(double[][] srcU, double[][] srcV, double[][] dst, int colNo, int widthV, int heightU) {
        for (int x = 0; x < widthV; x++) {
                double srcElemV = srcV[colNo][x];
            for (int y = 0; y < heightU; y++) {
                // the colNoth column of U times the colNoth row of V and reshape the result matrix col by col to one column.
                dst[x * heightU + y][colNo] = srcU[y][colNo] * srcElemV;
            }
        }
    }