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