有限元数

Number of finite elements

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

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

但是这个returns

[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 returns arma::uvec 类型的向量,它是 arma::Col<uword> 的类型定义。每个对象 Col 都有一个属性 .n_elem 表示向量的长度。因为 find_finite() returns 一个向量包含有限的 X(argument) 元素的索引,所以可以简单地将该向量分配给类型 arma::uvec 的变量,或者构造一个副本结果向量,并调用它的属性 .n_elem 来告诉我们它拥有的元素数量。

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

免责声明:我以前用过犰狳,可能已经过时了。