为什么在多维数据集中分配值时会生成 nan?
why are nan being produced when assigning values in a cube?
我在使用 Armadillo 和 RcppArmadillo 时遇到了这个奇怪的问题。我正在创建一个充满零值的立方体,我希望将特定元素变成零值。但是,当我使用分配来执行此操作时,其他元素的值会略有变化并且通常等于 nan。有谁知道是什么原因造成的?
示例:
#include <RcppArmadillo.h>
using namespace arma;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
cube testc() {
cube tester = cube(10,10,2);
uvec indexes = {25,125};
for(unsigned int i=0; i<indexes.n_elem; i++) {
tester(indexes(i))=1.0;
};
cout<< tester;
return(tester);
}
当我单独分配每个元素(tester(25)=1.0
后跟 tester(125)=1.0
)时,不会发生此错误,但如果我有大量元素要替换,这是不切实际的。 nan 出现在 cout
和 R 对象中,这让我认为这个问题与 Rcpp 无关。
您的立方体对象未用零初始化,因此可能会得到 NaN 值。
Constructors:
cube()
cube(n_rows, n_cols, n_slices) (memory is not initialised)
cube(n_rows, n_cols, n_slices, fill_type) (memory is initialised)
...
- When using the cube(n_rows, n_cols, n_slices) or cube(size(X)) constructors, by default the memory is uninitialised (ie. may contain garbage); memory can be explicitly initialised by specifying the fill_type, as per the Mat class (except for fill::eye)
用零显式初始化的例子:
cube A(10,10,2,fill::zeros);
cube B(10,10,2);
B.zeros();
cube C;
C.zeros(10,10,2);
我在使用 Armadillo 和 RcppArmadillo 时遇到了这个奇怪的问题。我正在创建一个充满零值的立方体,我希望将特定元素变成零值。但是,当我使用分配来执行此操作时,其他元素的值会略有变化并且通常等于 nan。有谁知道是什么原因造成的?
示例:
#include <RcppArmadillo.h>
using namespace arma;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
cube testc() {
cube tester = cube(10,10,2);
uvec indexes = {25,125};
for(unsigned int i=0; i<indexes.n_elem; i++) {
tester(indexes(i))=1.0;
};
cout<< tester;
return(tester);
}
当我单独分配每个元素(tester(25)=1.0
后跟 tester(125)=1.0
)时,不会发生此错误,但如果我有大量元素要替换,这是不切实际的。 nan 出现在 cout
和 R 对象中,这让我认为这个问题与 Rcpp 无关。
您的立方体对象未用零初始化,因此可能会得到 NaN 值。
Constructors:
cube()
cube(n_rows, n_cols, n_slices) (memory is not initialised)
cube(n_rows, n_cols, n_slices, fill_type) (memory is initialised)
...
- When using the cube(n_rows, n_cols, n_slices) or cube(size(X)) constructors, by default the memory is uninitialised (ie. may contain garbage); memory can be explicitly initialised by specifying the fill_type, as per the Mat class (except for fill::eye)
用零显式初始化的例子:
cube A(10,10,2,fill::zeros);
cube B(10,10,2);
B.zeros();
cube C;
C.zeros(10,10,2);