为什么在多维数据集中分配值时会生成 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 值。

来自documentation

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);