gpt4 book ai didi

r - RCPP矩阵:循环遍历行,一次一列

转载 作者:行者123 更新时间:2023-12-03 12:11:26 24 4
gpt4 key购买 nike

这是我第一次尝试Rcpp,这个非常简单的问题给我带来了麻烦。我想使用嵌套的for循环对矩阵的单个值进行操作,一次仅一列。我要的脚本看起来像这样:

src <- '
Rcpp::NumericMatrix Am(A);
int nrows = Am.nrow();
int ncolumns = Am.ncol();
for (int i = 0; i < ncolumns; i++){
for (int j = 1; j < nrows; j++){
Am[j,i] = Am[j,i] + Am[j-1,i];
}
}
return Am;
'
fun <- cxxfunction(signature(A = "numeric"), body = src, plugin="Rcpp")
fun(matrix(1,4,4))

所需的输出将是这样的:
     [,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4

问题显然出在这一行,我不知道如何引用矩阵的各个元素。
Am[j,i] = Am[j,i] + Am[j-1,i];

抱歉,如果这是一个愚蠢的新手问题。任何提示将不胜感激!

最佳答案

不能在单个[ ]表达式中使用多个索引。我认识的 no C++矩阵类系统或库克服了C语言限制。因此,请改为使用( )

解决此问题以及您实际上没有将src传递给cxxfunction()的错误,我们得到以下信息:

R> src <- '
+ Rcpp::NumericMatrix Am(A);
+ int nrows = Am.nrow();
+ int ncolumns = Am.ncol();
+ for (int i = 0; i < ncolumns; i++) {
+ for (int j = 1; j < nrows; j++) {
+ Am(j,i) = Am(j,i) + Am(j-1,i);
+ }
+ }
+ return Am;
+ '
R> fun <- cxxfunction(signature(A = "numeric"), body = src, plugin="Rcpp")
R> fun(matrix(1,4,4))
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
R>

最后,请注意,Rcpp sugar具有一次处理整个行或整个列的示例,请参阅邮件列表文件和小插图。

编辑:明确地说,这里只是使用一个循环和Rcpp sugar的按列索引的情况相同:
R> src <- '
+ Rcpp::NumericMatrix Am(A);
+ int nrows = Am.nrow();
+ for (int j = 1; j < nrows; j++) {
+ Am(j,_) = Am(j,_) + Am(j-1,_);
+ }
+ return Am;
+ '
R> fun <- cxxfunction(signature(A = "numeric"), body = src, plugin="Rcpp")
R> fun(matrix(1,4,4))
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
R>

关于r - RCPP矩阵:循环遍历行,一次一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5931092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com