gpt4 book ai didi

c++ - Rcpp:按照另一个 vector 的顺序重新排列一个 vector

转载 作者:行者123 更新时间:2023-11-30 02:21:37 25 4
gpt4 key购买 nike

我是 Rcpp 的新手。我需要重新排列 vector A按另一个 vector 的顺序B ;例如,

A=c(0.5,0.4,0.2,0.9)
B=c(9,1,3,5)

我想制作C=c(0.4,0.2,0.9,0.5)由 Rcpp 提供。

我知道简单的 r 代码,C=A[order(B)] , 但我必须使用 Rcpp 代码。

我找到了如何找到 B 的顺序通过使用 sort_index , 但我没能安排 A关于 B 的订单.

我怎样才能做到?

最佳答案

您应该可以为此使用 arma::sort_index,您在帖子中提到了这一点:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::vec arma_sort(arma::vec x, arma::vec y) {
return x(arma::sort_index(y));
}

/*** R
A <- c(0.5, 0.4, 0.2, 0.9)
B <- c(9, 1, 3, 5)
arma_sort(A, B)
*/

结果:

> arma_sort(A, B)
[,1]
[1,] 0.4
[2,] 0.2
[3,] 0.9
[4,] 0.5

当然,还有其他方法。在普通 C++ 的上下文中,在 Stack Overflow 上多次询问过这个问题的变体。下面我改编了答案 here对于 Rcpp:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
NumericVector Rcpp_sort(NumericVector x, NumericVector y) {
// Order the elements of x by sorting y
// First create a vector of indices
IntegerVector idx = seq_along(x) - 1;
// Then sort that vector by the values of y
std::sort(idx.begin(), idx.end(), [&](int i, int j){return y[i] < y[j];});
// And return x in that order
return x[idx];
}

/*** R
A <- c(0.5, 0.4, 0.2, 0.9)
B <- c(9, 1, 3, 5)
Rcpp_sort(A, B)
*/

结果:

> Rcpp_sort(A, B)
[1] 0.4 0.2 0.9 0.5

关于c++ - Rcpp:按照另一个 vector 的顺序重新排列一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118248/

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