<?php include "../Matrix.php"; /** * Tiling of matrix X in [rowWise by colWise] dimension. Tiling * creates a larger matrix than the original data X. Example, if * X is to be tiled in a [3 x 4] manner, then: * * / \ * | X X X X | * C = | X X X X | * | X X X X | * \ / * * @param X Matrix * @param rowWise int * @param colWise int * @return Matrix */ function tile(&$X, $rowWise, $colWise){ $xArray = $X->getArray(); print_r($xArray); $countRow = 0; $countColumn = 0; $m = $X->getRowDimension(); $n = $X->getColumnDimension(); if( $rowWise<1 || $colWise<1 ){ die("tile : Array index is out-of-bound."); } $newRowDim = $m*$rowWise; $newColDim = $n*$colWise; $result = array(); for($i=0 ; $i<$newRowDim; ++$i) { $holder = array(); for($j=0 ; $j<$newColDim ; ++$j) { $holder[$j] = $xArray[$countRow][$countColumn++]; // reset the column-index to zero to avoid reference to out-of-bound index in xArray[][] if($countColumn == $n) { $countColumn = 0; } } // end for ++$countRow; // reset the row-index to zero to avoid reference to out-of-bound index in xArray[][] if($countRow == $m) { $countRow = 0; } $result[$i] = $holder; } // end for return new Matrix($result); } $X =array(1,2,3,4,5,6,7,8,9); $nRow = 3; $nCol = 3; $tiled_matrix = tile(new Matrix($X), $nRow, $nCol); echo "<pre>"; print_r($tiled_matrix); echo "</pre>"; ?>