这篇文章主要介绍了PHP使用数组实现矩阵数学运算的方法,结合具体实例形式分析了php基于数组实现矩阵表示与运算的相关操作技巧,需要的朋友可以参考下
具体如下:
矩阵运算就是对两个数据表进行某种数学运算,并得到另一个数据表.
下面的例子中我们创建了一个基本完整的矩阵运算函数库,以便用于矩阵操作的程序中.
来自 PHP5 in Practice (U.S.)Elliott III & Jonathan D.Eisenhamer
<?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利用数组实现矩阵数学运算的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具