为啥在多维数据集中分配值时会产生nan?
Posted
技术标签:
【中文标题】为啥在多维数据集中分配值时会产生nan?【英文标题】:why are nan being produced when assigning values in a cube?为什么在多维数据集中分配值时会产生nan? 【发布时间】:2021-01-10 12:09:20 【问题描述】:我对犰狳和 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 无关。
【问题讨论】:
【参考方案1】:您的多维数据集对象未用零初始化,因此有可能获得 NaN 值。
来自documentation:
构造函数:
立方体() cube(n_rows, n_cols, n_slices) (内存未初始化) cube(n_rows, n_cols, n_slices, fill_type) (内存已初始化) ...
使用 cube(n_rows, n_cols, n_slices) 或 cube(size(X)) 构造函数时,默认情况下内存未初始化(即可能包含垃圾);内存可以通过指定 fill_type 来显式初始化,根据 Mat 类(fill::eye 除外)
用零显式初始化的示例:
cube A(10,10,2,fill::zeros);
cube B(10,10,2);
B.zeros();
cube C;
C.zeros(10,10,2);
【讨论】:
以上是关于为啥在多维数据集中分配值时会产生nan?的主要内容,如果未能解决你的问题,请参考以下文章