Предположим, что мне нужен код на 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!"; } ?>