有限元数 我试图用ARMADILO在C++中找到一个矩阵中的有限元素数。假设一个双矩阵y,我想我可以用(在一个mex函数中)来实现
但这又回来了有限元数 我试图用ARMADILO在C++中找到一个矩阵中的有限元素数。假设一个双矩阵y,我想我可以用(在一个mex函数中)来实现,c++,armadillo,C++,Armadillo,但这又回来了 [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来获得矩阵中有限元素的数量而不创建一个矩阵?
[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
来获得矩阵中有限元素的数量而不创建一个矩阵?find_finite
返回类型为arma::uvec
的向量,这是arma::Col
的类型定义。每个对象Col
都有一个表示向量长度的属性.n_elem
。由于find_finite()
返回一个向量,该向量包含有限X(参数)元素的索引,因此可以简单地将该向量分配给arma::uvec
类型的变量,或者构造结果向量的副本,并调用其属性.n_elem
,告诉我们它拥有的元素数量
另外,如果您想使用accu()
,您可以将find_finite()
的结果向量指定给uvec
让我们称之为arma::uvec newvector
,然后使用其成员函数newvector.ones()
,该函数将其所有元素设置为1。然后使用accu(newvector)
,这与您所做的类似
免责声明:我不久前使用过犰狳,可能已经过时。将
accu()
的结果强制转换为double
看起来很可疑。find_finite()
的输出是带有uword
元素的向量,因此在这种情况下accu()
的输出是uword
。
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