有限元数量

时间:2015-06-09 16:56:24

标签: c++ armadillo

我试图使用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来获取矩阵中的有限元数量而不创建矩阵?

1 个答案:

答案 0 :(得分:2)

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

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

免责声明:我之前使用的是犰狳,可能已经过时了。