我通常使用 Python,但我对 c++ 的基本知识允许我在需要提高代码速度时进行切换。
目前,我有一个 python 脚本(除其他外)计算方阵的所有主要未成年人(指定顺序)的均值和标准差。未成年人是子矩阵的决定因素(参见维基百科的定义)。即使是具有 30x30 条目的矩阵也有超过十亿个不同的子矩阵,因此也有超过十亿个不同的次要矩阵。因此,即使是未成年人计算中的微小时间差异对我来说也很重要。
Python/NumPy 使用 LAPACK 例程来创建子矩阵和计算行列式。所以我认为最好在 c++ 中使用相同的例程。然而,似乎更有经验的程序员倾向于劝阻初学者不要在 c++ 中使用 LAPACK 库(参见 stackexchange上的其他问题),而是指向其他包,例如 Armadillo 或 Eigen。
据我了解,Armadillo 和 Eigen 是再次依赖 LAPACK 的库,但我不知道这些库是否会产生某种可能会减慢速度的开销。
所以我的问题是:我是否应该期望通过增加计算时间(如果与 LAPACK 相比)为犰狳或 Eigen 的“初学者友好”付费?如果有,多少钱?