gpt4 book ai didi

c++ - R 数据框和 c++ 中的 which.min() 等价物

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:10 24 4
gpt4 key购买 nike

我正在将 R 代码翻译成 C++,我想找到一个等效的(最佳)结构,它允许与数据框进行相同类型的操作,但在 C++ 中。

操作是:

  • 添加元素(行)
  • 从索引中删除元素(行)
  • 获取最低值的索引

例如:

a <- data.frame(i = c(4, 9, 3, 1, 8, 2, 7, 10, 6, 6), 
j = c(8, 8, 8, 4, 3, 9, 1, 4, 8, 9) ,
v = c(1.9, 18, 1.3, 17, 1.5, 14, 11, 1.4, 18, 2.0),
o = c(3, 3, 3, 3, 1, 2, 1, 2, 3, 3))

a[which.min(a$v), c('i', 'j')] # find lowest v value and get i,j value
a <- a[-which.min(a$v)] # remove row from index
a <- cbind(a, data.frame(i = 3, j = 9, v = 2, o = 2)) # add a row

当我使用 Rcpp 时,Rcpp::DataFrame 可能是一个选项(我不知道我会怎么做 which.min 它),但我猜它对于任务来说很慢,因为这些操作需要重复很多,我不需要将它运回 R。

编辑:

目标。这里要明确的是,目标是提高速度。这是将代码从 R 翻译成 C++ 的明显原因(可能还有其他原因,这就是我澄清的原因)。然而,维护和易于实现是其次的。

操作更精确。算法是:将大量数据添加到数组(多行),然后提取最低值并将其删除。重复。这就是为什么我不会选择排序 vector ,而是在数组频繁更新(添加)时始终按需搜索最低数据。我认为它更快,但也许我错了。

最佳答案

我认为一个 vector 的 vector 应该做你想做的。您需要手动实现最小值查找(两个嵌套循环),这是您在不增加开销的情况下可以做到的最快速度。您可以通过跟踪每行中最小元素的位置以及该行来加快查找最小值的速度。

关于c++ - R 数据框和 c++ 中的 which.min() 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673611/

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