gpt4 book ai didi

c++ - 将 arma::cx_mat 转换为数组数组

转载 作者:太空宇宙 更新时间:2023-11-04 13:13:38 25 4
gpt4 key购买 nike

如何将 arma::cx_mat 转换为数组数组?

转换的动机是使用 C 库 libmatio 来输出 .mat 文件。

到目前为止,我已经创建了一个函数来将 arma:cx_mat 转换为 vector 的 vector :

std::vector<std::vector<double>> mat_to_vv(arma::cx_mat &M)
{
std::vector<std::vector<double>> vv(M.n_rows);
for(size_t i=0; i<M.n_rows; ++i)
{
vv[i] = arma::conv_to<std::vector<double>>::from(M.row(i));
};

return vv;
}

最佳答案

如果您需要将实部从 cx_mat 转换为 C 数组数组可以使用此函数:

double** mat_to_carr(arma::cx_mat &M,std::size_t &n,std::size_t &m)
{
const std::size_t nrows = M.n_rows;
const std::size_t ncols = M.n_cols;
double **array = (double**)malloc(nrows * sizeof(double *));

for(std::size_t i = 0; i < nrows; i++)
{
array[i] = (double*)malloc(ncols * sizeof(double));
for (std::size_t j = 0; j < ncols; ++j)
array[i][j] = M(i + j*ncols).real();
}

n = nrows;
m = ncols;

return array;
}

注意,当不再需要时需要释放数组。示例:

int main()
{
cx_mat X(5, 5, fill::randn);
std::size_t n,m;
auto array = mat_to_carr(X,n,m);
for (std::size_t i = 0; i < n; ++i)
{
for (std::size_t j = 0; j < m; ++j)
std::cout<<array[i][j]<<" ";
std::cout<<std::endl;
}

for(std::size_t i = 0; i < n; i++)
free(array[i]);
free(array);
return 0;
}

关于c++ - 将 arma::cx_mat 转换为数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515520/

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