【发布时间】:2022-12-29 09:59:12
【问题描述】:
我是 C++ 的新手。对于统计方法,我计算大矩阵,例如A和B。它们是n x n,所以对于大样本量n,它们变得非常大。如果他们是double和n = 70k,我想它可能是30GB的顺序?
因为所需的矩阵数量可能会有所不同,所以我实现了该算法以使用矩阵向量并对其进行迭代以进行某些操作。例如。
arma::mat A;
arma::mat B;
std::vector<arma::mat> matrices;
matrices = {A, B};
有没有办法在不复制矩阵的情况下创建这个std::vector?
我试图通过这样做来检查内存是否相同:
logger->info("Memory address for A: {}.", (void *)&A);
logger->info("Memory address for matrices.at(0): {}.", (void *)&matrices.at(0));
它显示了不同的地址,所以我假设它正在创建一个副本,但我不确定。
我试着用
std::vector<arma::mat> matrices;
matrices.push_back(A);
内存地址仍然不同。和
std::vector<arma::mat> matrices;
matrices.push_back(std::move(A));
该算法不再有效,因为矩阵为空。
【问题讨论】:
-
如果你想要像向量一样的东西,但实际上指向来自不同容器的数据,那么你可能需要查看
std::span -
谢谢,这听起来是个不错的建议。下面的答案似乎并不依赖于我正在使用的 C++ 版本的外部库。