You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.7 KiB
70 lines
1.7 KiB
<?php
|
|
|
|
/**
|
|
*
|
|
* Class for the creating "special" Matrices
|
|
*
|
|
* @copyright Copyright (c) 2018 Mark Baker (https://github.com/MarkBaker/PHPMatrix)
|
|
* @license https://opensource.org/licenses/MIT MIT
|
|
*/
|
|
|
|
namespace Matrix;
|
|
|
|
/**
|
|
* Matrix Builder class.
|
|
*
|
|
* @package Matrix
|
|
*/
|
|
class Builder
|
|
{
|
|
/**
|
|
* Create a new matrix of specified dimensions, and filled with a specified value
|
|
* If the column argument isn't provided, then a square matrix will be created
|
|
*
|
|
* @param mixed $fillValue
|
|
* @param int $rows
|
|
* @param int|null $columns
|
|
* @return Matrix
|
|
* @throws Exception
|
|
*/
|
|
public static function createFilledMatrix($fillValue, $rows, $columns = null)
|
|
{
|
|
if ($columns === null) {
|
|
$columns = $rows;
|
|
}
|
|
|
|
$rows = Matrix::validateRow($rows);
|
|
$columns = Matrix::validateColumn($columns);
|
|
|
|
return new Matrix(
|
|
array_fill(
|
|
0,
|
|
$rows,
|
|
array_fill(
|
|
0,
|
|
$columns,
|
|
$fillValue
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Create a new identity matrix of specified dimensions
|
|
* This will always be a square matrix, with the number of rows and columns matching the provided dimension
|
|
*
|
|
* @param int $dimensions
|
|
* @return Matrix
|
|
* @throws Exception
|
|
*/
|
|
public static function createIdentityMatrix($dimensions, $fillValue = null)
|
|
{
|
|
$grid = static::createFilledMatrix($fillValue, $dimensions)->toArray();
|
|
|
|
for ($x = 0; $x < $dimensions; ++$x) {
|
|
$grid[$x][$x] = 1;
|
|
}
|
|
|
|
return new Matrix($grid);
|
|
}
|
|
}
|
|
|