假设我想要一个复制矩阵乘法的 PHP 代码,我的矩阵如下所示:
$matrix_1 = array(array(1,2), array(3,4))
子数组 ( 2 ) 的数量相当于矩阵中的列数,而每个子数组 ( 2 ) 中的元素数表示矩阵中的行数。
代码需要:
- 考虑不同维度的矩阵。
- 识别两个矩阵何时不能相乘(矩阵 A 中的列数与矩阵 B 中的行数不同)。
- 可能考虑了标量乘法,其中矩阵的每个元素都乘以一个常数。
我在这里附上了幻灯片,解释了代码应该实现的目标(带有两个示例)。
假设我想要一个复制矩阵乘法的 PHP 代码,我的矩阵如下所示:
$matrix_1 = array(array(1,2), array(3,4))
子数组 ( 2 ) 的数量相当于矩阵中的列数,而每个子数组 ( 2 ) 中的元素数表示矩阵中的行数。
代码需要:
我在这里附上了幻灯片,解释了代码应该实现的目标(带有两个示例)。
这是我的(冗长的)解决方案。我将尝试看看是否可以在某些地方简化它。注意:
else
命令中只需包含一个count()
命令来识别一个(或多个)数组是否是一个标量,并相应地使用array_map
.编码:
<?php
// FUNCTIONS
function mul($x, $y){
return ($x * $y);
}
// Example Arrays
$array_1 = array(array(1,4,7), array(2,5,8), array(3,6,9));
$array_2 = array(array(7,6,4), array(5,8,1), array(4,3,2));
// Check for row/column equivalence
$array_1_cols = count($array_1);
$array_1_rows = count($array_1[0]);
$array_2_cols = count($array_2);
$array_2_rows = count($array_2[0]);
// Check to see if matrix multiplication is possible
if($array_1_cols == $array_2_rows) {
$m_cols = $array_2_cols;
$m_rows = $array_1_rows;
$array_3 = array();
$col_index = 1;
// Start loop for each column of the new matrix
while($col_index <= $m_cols) {
$m_col_index = $col_index - 1;
$sub_array[$col_index] = array();
// Start loop for each row of the new matrix
$row_index = 1;
while($row_index <= $m_rows) {
$m_row_index = $row_index - 1;
// Auxiliary array for each row of A
$a_row[$row_index] = array();
$a_index = 1;
while($a_index <= $array_1_cols) {
$start_p = $a_index - 1;
$el_part_[$a_index] = $array_1[$start_p];
$el_part_[$a_index] = $el_part_[$a_index][$m_row_index];
array_push($a_row[$row_index], $el_part_[$a_index]);
++$a_index;
}
// Array for columns of B
$b_col[$col_index] = $array_2[$m_col_index];
// Build matrix C - defined over the rows of A and the columns of B
$c_part[$row_index][$col_index] = array_map('mul', $a_row[$row_index], $b_col[$col_index]);
$c_el[$row_index][$col_index] = array_sum($c_part[$row_index][$col_index]);
array_push($sub_array[$col_index], $c_el[$row_index][$col_index]);
// End row loop
++$row_index;
}
array_push($array_3,$sub_array[$col_index]);
++$col_index;
}
print_r($array_3);
} else {
echo "This is not possible!";
}
?>