The*_*ist 4 c++ vector matrix complex-numbers c++11
我曾经采用对称(Hermitian)矩阵的总和(矩阵在一个std::vector),这是一个巨大的浪费,因为虚部总是加零(我说的是边长的巨大矩阵n>1000,所以我认为这有所不同.
所以现在我只添加矩阵的上三角部分.但是我想进一步优化它,避免添加复杂的部分,因为我不需要它.
我目前使用的是:
std::real(std::accumulate(myMatrix.begin(), myMatrix.end(), std::complex<Real>(0,0)));
Run Code Online (Sandbox Code Playgroud)
这增加的所有元素myMatrix来std::complex<Real>(0,0),导致我需要的总和.
但这会添加我的矢量的实部和虚部,这是浪费!如何编写最优化的版本,仅添加此矩阵的实际部分?
更新:
虽然我接受了有效的答案,但我发现它比对矩阵的实部和虚部求和要慢.对于边长为128的矩阵,它慢了5%-10%.这是令人惊讶的.任何其他更快的建议都非常感谢.
请询问您是否需要其他信息.
Real real_sum = std::accumulate(
myMatrix.cbegin(), myMatrix.cend(), Real{},
[](Real const acc, std::complex<Real> const& c) { return acc + std::real(c); }
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |