gpt4 book ai didi

c++ - 有限元数

转载 作者:行者123 更新时间:2023-11-28 02:25:42 26 4
gpt4 key购买 nike

我正在尝试使用 Armadillo 在 C++ 中查找矩阵中的有限元素数。假设一个双矩阵 y,我想我可以用(在 mex 函数内)

mexPrintf("finite_y: %g\n", (double) accu(find_finite(y)));

但这会返回

[Matlab] finite_y: 1.41381e+09

但是,我可以让它工作

mat y_ones = mat(y.n_rows, y.n_cols, fill::ones);
mexPrintf("finite_y (sum-ones): %g\n", accu(y_ones(find_finite(y))));

[Matlab] finite_y (sum-ones): 53150

如何使用 accufind_finite 来获取矩阵中有限元素的数量而不创建矩阵?

最佳答案

find_finite返回 arma::uvec 类型的 vector , 这是 arma::Col<uword> 的类型定义.每个对象 Col有一个属性 .n_elem表示 vector 的长度。因为find_finite()返回一个 vector ,其中包含有限的 X(argument) 元素的索引,可以简单地将该 vector 分配给类型为 arma::uvec 的变量,或构建结果 vector 的拷贝,并调用其属性 .n_elem告诉我们它有多少元素。

此外,如果您想使用 accu()您可以从 find_finite() 分配结果 vector 到 uvec让我们称之为arma::uvec newvector; , 然后使用它的成员函数 newvector.ones()这会将其所有元素设置为 1。然后使用 accu(newvector) ,这与您所做的类似。

免责声明:我之前使用过 Armadillo,可能已经过时了。

关于c++ - 有限元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30738326/

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