79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?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>"; | ||
|  | ?>
 |