Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有限元数 我试图用ARMADILO在C++中找到一个矩阵中的有限元素数。假设一个双矩阵y,我想我可以用(在一个mex函数中)来实现_C++_Armadillo - Fatal编程技术网

有限元数 我试图用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