我试图使用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
如何使用accu
和find_finite
来获取矩阵中的有限元数量而不创建矩阵?
答案 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)
,这与您所做的类似。
免责声明:我之前使用的是犰狳,可能已经过时了。