有限元数
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
如何在不创建矩阵的情况下使用 accu
和 find_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)
,这与您所做的类似。
免责声明:我以前用过犰狳,可能已经过时了。
我正在尝试使用 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
如何在不创建矩阵的情况下使用 accu
和 find_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)
,这与您所做的类似。
免责声明:我以前用过犰狳,可能已经过时了。