在 Rcpp 中创建对角矩阵但结果是错误的
Create diagonal matrix in Rcpp but the result is wrong
代码应该创建一个值为 1 的对角矩阵。
// [[Rcpp::export]]
NumericMatrix filterOne(int g_size){
NumericMatrix filter(g_size, g_size);
int ptr, ptr2;
for(ptr=0;ptr<g_size;ptr++){
Rcout << ptr << endl;
filter[ptr, ptr] = 1;
}
// the following printing is
// for checking the content
for(ptr=0;ptr<g_size;ptr++){
for(ptr2=0;ptr2<g_size;ptr2++){
Rcout << ptr+1 << " - " << ptr2+1 << " : " << filter[ptr, ptr2] << endl;
}
}
return filter;
}
所以我在R环境中调用x = filterOne(3)
,结果是:
0
1
2
1 - 1 : 1
1 - 2 : 1
1 - 3 : 1
2 - 1 : 1
2 - 2 : 1
2 - 3 : 1
3 - 1 : 1
3 - 2 : 1
3 - 3 : 1
似乎所有单元格的值都是1。然后,只需键入x
即可在RGUI中查看返回的矩阵值:
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 1 0 0
[3,] 1 0 0
怎么会这样?
如果有人使用相同的代码但可以生成正确的结果,请告诉我。
非常感谢。
我认为问题在于您访问 NumericMatrix 元素的方式。您应该使用 ( ) 而不是 [ ]。以下作品:
// [[Rcpp::export]]
NumericMatrix filterOne(int g_size){
NumericMatrix filter(g_size, g_size);
int ptr, ptr2;
for(ptr=0;ptr<g_size;ptr++){
filter(ptr, ptr) = 1;
}
return filter;
}
> filterOne(3)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
代码应该创建一个值为 1 的对角矩阵。
// [[Rcpp::export]]
NumericMatrix filterOne(int g_size){
NumericMatrix filter(g_size, g_size);
int ptr, ptr2;
for(ptr=0;ptr<g_size;ptr++){
Rcout << ptr << endl;
filter[ptr, ptr] = 1;
}
// the following printing is
// for checking the content
for(ptr=0;ptr<g_size;ptr++){
for(ptr2=0;ptr2<g_size;ptr2++){
Rcout << ptr+1 << " - " << ptr2+1 << " : " << filter[ptr, ptr2] << endl;
}
}
return filter;
}
所以我在R环境中调用x = filterOne(3)
,结果是:
0
1
2
1 - 1 : 1
1 - 2 : 1
1 - 3 : 1
2 - 1 : 1
2 - 2 : 1
2 - 3 : 1
3 - 1 : 1
3 - 2 : 1
3 - 3 : 1
似乎所有单元格的值都是1。然后,只需键入x
即可在RGUI中查看返回的矩阵值:
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 1 0 0
[3,] 1 0 0
怎么会这样?
如果有人使用相同的代码但可以生成正确的结果,请告诉我。 非常感谢。
我认为问题在于您访问 NumericMatrix 元素的方式。您应该使用 ( ) 而不是 [ ]。以下作品:
// [[Rcpp::export]]
NumericMatrix filterOne(int g_size){
NumericMatrix filter(g_size, g_size);
int ptr, ptr2;
for(ptr=0;ptr<g_size;ptr++){
filter(ptr, ptr) = 1;
}
return filter;
}
> filterOne(3)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1