gpt4 book ai didi

c++ - 在 Armadillo 库中引用 vector 的最快方法

转载 作者:太空狗 更新时间:2023-10-29 21:44:57 27 4
gpt4 key购买 nike

我正在使用 Armadillo 来学习线性代数。我设置了一个相当大的 vector (至少 35000000 个元素)。我有另一个长度为大 vector 一半的 vector 。我正在使用 fftw 对大 vector 进行傅立叶变换,但数据的前半部分是从小 vector 复制而来的,如下所示

#include <armadillo>
#include <iostream>
#include <iomanip>
#include <fstream>
#include "fftw3.h"

using namespace std;
using namespace arma;

int main(void)
{
arma::Col<double> v1, v2;
v1.resize(35000000);
v2.resize(17500000);
// initialize v2
for (int i=0; i<4096; i++) // repeat 4096 times
{
v1.rows(0, 17500000) = v2;
fftw_complex* in = reinterpret_cast<fftw_complex*>(v1.colptr(0));
fftw_plan plan = fftw_plan_dft_1d(35000000, in, in, FFTW_FORWARD, FFTW_MEASURE);
v2 = v1.rows(0, 175000000);
}
}

这段代码非常慢,因为我们需要将元素从 v2 复制到 v1 并向后复制。无论如何让 v1 的元素引用 v2 而不是拷贝?

最佳答案

不确定您要实现的目标,但是您可以通过 .memptr() 获取指向 vector (或矩阵)使用的内存的指针功能。然后可以使用该指针和偏移量来创建一个新的 vector (或矩阵),该 vector (或矩阵)通过专用 vector constructors 使用外部/辅助存储器。和 matrix constructors .

例如:

vec v1(35000000);

vec v2(v1.memptr(), 17500000, false); // v2 will now share memory with v1

顺便说一下,不要使用 .resize()与 Armadillo vector 和矩阵一起运行,除非你真的想保留现有数据。使用 .set_size()相反,这要快得多。

关于c++ - 在 Armadillo 库中引用 vector 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18859328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com