如何以简单高效的方式进行PHP矩阵运算

11

我正在寻找一种在PHP中进行矩阵运算的简单/高效方式。

我希望能够执行基本的矩阵操作,如求逆矩阵、矩阵相乘、行列式、加法、减法、解线性方程组Ax=B、转置等。

我关注的是小型矩阵(我要求逆的矩阵最大为100x100,我要乘以/转置的向量可能达到1000x1)。

我发现了一个PEAR包Math_Matrix,但它似乎被忽视了(我开发时使用E_STRICT,它会抛出许多已弃用警告)。我发现的其他链接似乎大多已经损坏或未更新。

我找到了Lapack PHP包,但它没有其他操作,如乘法、减法或转置。

我知道另一个选项是与其他软件集成,如Octave或Sage,但我们还不确定是否要这样做(财务团队不喜欢Python语法,IT团队担心Octave的开销)。

是否有任何独立库供任何人用于此类矩阵运算,并具有所有基本操作并且已更新?


一个JAMA的PHP移植版本我知道肯定有一些这样的操作,但可能同样过时。Michael Bommarito为其编写了一个polyfit插件,也许也会有用。然而,任何这些老的库都应该为您提供数学的核心部分。 - Mark Baker
从Octave/Sage的角度来看,我认为确切地了解您正在查看什么类型的矩阵将非常有帮助。我假设它们是浮点数的矩阵,并且它们不会是在数字上求逆时具有病态条件的矩阵。使用numpy(带或不带Sage)可能是一个选择,但是再次更新问题并提供一个具体的例子(例如链接)将非常有帮助。当然,R也是一个选择。 - kcrisman
我还没有样本矩阵可以展示。我们只是为即将到来的项目提出需求/解决方案 =/ 但是,它们肯定是浮点数。 - Jimmy
你可以与R集成。 - ilhan
2个回答

3
请查看http://projects.moongate.ro/octave-daemon/
以下是一些可减少开销并说服IT团队的功能:
- 守护进程可通过网络访问,这意味着您可以将所有Octave进程移动到单独的服务器上,如果您决定需要。 - Octave进程是持久的,这意味着:过去加载或计算的任何数据仍将对新连接的客户端可用。 - 新的Octave进程启动时间不会影响客户端。 - 提供了Octave矩阵和PHP数组之间的转换。

我一段时间前在谷歌上搜索同样的主题时发现了这个。你在生产中使用过吗?它可靠且没有内存泄漏吗? - Jimmy
不,我没有使用过它,但其中一些功能很有趣。我会将守护程序放在自己的服务器上,并使用优化硬件来运行Octave。将此服务器设置为无法访问互联网,并将其保持在与Web服务器相同的网络中。这应该可以最大程度地减少问题。 - Charity Leschinski

1
我在一年后回答自己的问题。
我们选择了另一个选项,编写了自己的 C++ 小型库,并将其编译并添加到 PHP 作为扩展。这样可以获得最佳性能并且代码保持得相当清晰易懂。
$inverted = my_matrix_invert($matrixArray);

想要进行这种操作的人应该查看这里:http://www.php-cpp.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接