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>";
							 | 
						||
| 
								 | 
							
								?>
							 |