温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在PHP中利用数组实现矩阵数学运算

发布时间:2021-03-19 16:53:30 来源:亿速云 阅读:265 作者:Leah 栏目:开发技术

今天就跟大家聊聊有关怎么在PHP中利用数组实现矩阵数学运算,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

矩阵运算就是对两个数据表进行某种数学运算,并得到另一个数据表.

下面的例子中我们创建了一个基本完整的矩阵运算函数库,以便用于矩阵操作的程序中.

<?php // A Library of Matrix Math functions. // All assume a Matrix defined by a 2 dimensional array, where the first // index (array[x]) are the rows and the second index (array[x][y]) // are the columns // First create a few helper functions // A function to determine if a matrix is well formed. That is to say that // it is perfectly rectangular with no missing values: function _matrix_well_formed($matrix) {   // If this is not an array, it is badly formed, return false.   if (!(is_array($matrix))) {     return false;   } else {     // Count the number of rows.     $rows = count($matrix);     // Now loop through each row:     for ($r = 0; $r < $rows; $r++) {       // Make sure that this row is set, and an array. Checking to       // see if it is set is ensuring that this is a 0 based       // numerically indexed array.       if (!(isset($matrix[$r]) && is_array($matrix[$r]))) {         return false;       } else {         // If this is row 0, calculate the columns in it:         if ($r == 0) {           $cols = count($matrix[$r]);         // Ensure that the number of columns is identical else exit         } elseif (count($matrix[$r]) != $cols) {           return false;         }         // Now, loop through all the columns for this row         for ($c = 0; $c < $cols; $c++) {           // Ensure this entry is set, and a number           if (!(isset($matrix[$r][$c]) &&               is_numeric($matrix[$r][$c]))) {             return false;           }         }       }     }   }   // Ok, if we actually made it this far, then we have not found   // anything wrong with the matrix.   return true; } // A function to return the rows in a matrix - //  Does not check for validity, it assumes the matrix is well formed. function _matrix_rows($matrix) {   return count($matrix); } // A function to return the columns in a matrix - //  Does not check for validity, it assumes the matrix is well formed. function _matrix_columns($matrix) {   return count($matrix[0]); } // This function performs operations on matrix elements, such as addition // or subtraction. To use it, pass it 2 matrices, and the operation you // wish to perform, as a string: '+', '-' function matrix_element_operation($a, $b, $operation) {   // Verify both matrices are well formed   $valid = false;   if (_matrix_well_formed($a) && _matrix_well_formed($b)) {     // Make sure they have the same number of columns & rows     $rows = _matrix_rows($a);     $columns = _matrix_columns($a);     if (($rows == _matrix_rows($b)) &&         ($columns == _matrix_columns($b))) {       // We have a valid setup for continuing with element math       $valid = true;     }   }   // If invalid, return false   if (!($valid)) { return false; }   // For each element in the matrices perform the operatoin on the   // corresponding element in the other array to it:   for ($r = 0; $r < $rows; $r++) {     for ($c = 0; $c < $columns; $c++) {       eval('$a[$r][$c] '.$operation.'= $b[$r][$c];');     }   }   // Return the finished matrix:   return $a; } // This function performs full matrix operations, such as matrix addition // or matrix multiplication. As above, pass it to matrices and the // operation: '*', '-', '+' function matrix_operation($a, $b, $operation) {   // Verify both matrices are well formed   $valid = false;   if (_matrix_well_formed($a) && _matrix_well_formed($b)) {     // Make sure they have complementary numbers of rows and columns.     // The number of rows in A should be the number of columns in B     $rows = _matrix_rows($a);     $columns = _matrix_columns($a);     if (($columns == _matrix_rows($b)) &&         ($rows == _matrix_columns($b))) {       // We have a valid setup for continuing       $valid = true;     }   }   // If invalid, return false   if (!($valid)) { return false; }   // Create a blank matrix the appropriate size, initialized to 0   $new = array_fill(0, $rows, array_fill(0, $rows, 0));   // For each row in a ...   for ($r = 0; $r < $rows; $r++) {     // For each column in b ...     for ($c = 0; $c < $rows; $c++) {       // Take each member of column b, with each member of row a       // and add the results, storing this in the new table:       // Loop over each column in A ...       for ($ac = 0; $ac < $columns; $ac++) {         // Evaluate the operation         eval('$new[$r][$c] += $a[$r][$ac] '.           $operation.' $b[$ac][$c];');       }     }   }   // Return the finished matrix:   return $new; } // A function to perform scalar operations. This means that you take the scalar value, // and the operation provided, and apply it to every element. function matrix_scalar_operation($matrix, $scalar, $operation) {   // Verify it is well formed   if (_matrix_well_formed($matrix)) {     $rows = _matrix_rows($matrix);     $columns = _matrix_columns($matrix);     // For each element in the matrix, multiply by the scalar     for ($r = 0; $r < $rows; $r++) {       for ($c = 0; $c < $columns; $c++) {         eval('$matrix[$r][$c] '.$operation.'= $scalar;');       }     }     // Return the finished matrix:     return $matrix;   } else {     // It wasn't well formed:     return false;   } } // A handy function for printing matrices (As an HTML table) function matrix_print($matrix) {   // Verify it is well formed   if (_matrix_well_formed($matrix)) {     $rows = _matrix_rows($matrix);     $columns = _matrix_columns($matrix);     // Start the table     echo '<table>';     // For each row in the matrix:     for ($r = 0; $r < $rows; $r++) {       // Begin the row:       echo '<tr>';       // For each column in this row       for ($c = 0; $c < $columns; $c++) {         // Echo the element:         echo "<td>{$matrix[$r][$c]}</td>";       }       // End the row.       echo '</tr>';     }     // End the table.     echo "</table>/n";   } else {     // It wasn't well formed:     return false;   } } // Let's do some testing. First prepare some formatting: echo "<mce:style><!-- table { border: 1px solid black; margin: 20px; } td { text-align: center; } --></mce:style><style mce_bogus="1">table { border: 1px solid black; margin: 20px; } td { text-align: center; }</style>/n"; // Now let's test element operations. We need identical sized matrices: $m1 = array(   array(5, 3, 2),   array(3, 0, 4),   array(1, 5, 2),   ); $m2 = array(   array(4, 9, 5),   array(7, 5, 0),   array(2, 2, 8),   ); // Element addition should give us: 9  12   7 //                 10   5   4 //                  3   7  10 matrix_print(matrix_element_operation($m1, $m2, '+')); // Element subtraction should give us:   1  -6  -3 //                    -4  -5   4 //                    -1   3  -6 matrix_print(matrix_element_operation($m1, $m2, '-')); // Do a scalar multiplication on the 2nd matrix:  8 18 10 //                        14 10  0 //                         4  4 16 matrix_print(matrix_scalar_operation($m2, 2, '*')); // Define some matrices for full matrix operations. // Need to be complements of each other: $m3 = array(   array(1, 3, 5),   array(-2, 5, 1),   ); $m4 = array(   array(1, 2),   array(-2, 8),   array(1, 1),   ); // Matrix multiplication gives: 0  31 //                -11  37 matrix_print(matrix_operation($m3, $m4, '*')); // Matrix addition gives:   9 20 //              4 15 matrix_print(matrix_operation($m3, $m4, '+')); ?>

看完上述内容,你们对怎么在PHP中利用数组实现矩阵数学运算有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI