存储矩阵并执行计算


Store matrices and perform calculations

每次请求网页时,我都必须将矩阵乘以向量。矩阵是对称的并且(可能)稀疏的,尺寸大约为500x500。向量是从另一个维度约为500x100000的矩阵中取出的一列。现在我的问题是如何存储矩阵并以有效的方式执行计算。我想用php进行计算,并用mysql或硬盘驱动器存储矩阵,但我认为有更好的工具可以完成这类任务。

如果你需要进一步了解什么,不要急于问!

好的,所以我们在这里得到了一个真正的角落案例:

  • 500x100000=50000000个元素。根据数据类型如果我们忽略,则转化为约50M-400M的内存中表示稀疏性和按索引寻址。对称矩阵将其减少到25-200M
  • 11%的非零密度意味着稀疏的地址是收支平衡-对小公司来说并没有真正的说服力数据类型,但可能是64位数据类型的选项

从这一点出发,有力地论证了两层解决方案:

  • 一个(共享的)"数据存储服务器"(MySQL是您的一个选项提到)
  • 以及一个(可能是PHP)前端

使用PHP进行500x500矩阵乘法似乎不是一种非常有效的方法:PHP中的循环开销相当高,因此在循环内做的事情很少,可能会浪费一点性能。

我建议采用稍微不同的解决方案:编写自己的后端(可能是C或C#),即

  • 启动时将矩阵读入内存
  • 在(本地)套接字上侦听命令,例如"multiply"
  • 对矩阵和给定数据执行这些命令并返回结果

并通过PHP提供。通过这种方式,您可以获得核心函数的编译语言的处理速度,同时前端具有PHP的简单性和以web为中心的特性。