- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 arma::find_unique
,我认为它返回了 vector 中每个唯一值第一次出现的索引,但它似乎返回了其他内容。
这是一个玩具函数:
// [[Rcpp::export]]
arma::uvec test(arma::vec& x_) {
vec x=arma::sort(x_);
return arma::find_unique(x);
}
如果我用一个简单的 vector test(5:1)
在 R 中运行该函数,我会得到一个包含所有索引的 vector 0,1,2,3,4
这是有道理的,因为每个值都是唯一的。
如果我尝试这样的事情:
set.seed(1991)
var=sample(1:8,20,TRUE)
test(var)
输出:
1,3,6,7,19,12,14,18.
除了第一个之外,所有这些值都有意义。为什么索引 1 处的第一个唯一值不是 0?显然我误解了 arma::find_unique
打算这样做,如果有人能启发我,我将不胜感激。
编辑我的 session 信息
最佳答案
好的,以下是@nrussell 的礼貌,这个人很了不起,并且在评论中给出了这个“答案”。 (我不值得打勾,也不值得投票。)
Actually, I'm pretty sure this is all just a misinterpretation of the Armadillo documentation, which never actually guarantees that a stable sort is used, as @Carl was expecting. Underneath, std::sort is
being called
, which is not guaranteed to be a stable sort by the C++ standard; also stated here:"The order of equal elements is not guaranteed to be preserved."
我可以演示这个here , 复制 "packet" structure在 Armadillo 算法中使用。我的猜测是
libc++
(通常由 OS X 使用)确实将std::sort
实现为稳定排序,而libstdc++
没有。
轮到我了:稳定排序,或维护具有相同键(即值)的记录的相对顺序,是这个问题背后的关键问题。例如,请考虑以下内容:
dog car pool dig
使用稳定排序的第一个字母排序给我们:
car dog dig pool
因为单词“dog”出现在 vector 中的“dig”之前,因此它必须出现在输出中的“dig”之前。
使用不稳定排序的第一个字母排序给我们:
car dig dog pool
或
car dog dig pool
主体与数字相关,因为每个 key 生成字面上都存在于其他地方。所以,我们有:
2, 3, 2, 4
因此,当找到唯一值时:
2, 3, 4
2 的 id 可以是 0 或 2。
正如@nrussell 所解释的,自 OS X Mavericks (10.9) 以来,macOS 默认依赖于 --stdlib=libc++
与传统的 --stdlib=libstdc++
标志编译。这可能是我无法复制它的原因,因为一种实现选择了稳定性而另一种则没有。
首先,我无法在 macOS 上复制它...(见结尾)
虽然我们似乎能够在 Linux 上重现它 (@nrussel)。这意味着在某些时候,链接代码中存在问题。
其次,arma::find_unique已实现here使用 matrix ops与 op_find_unique .后者是关键,因为它实现了比较器。
因此,简而言之,假设您对 vector 进行排序并且第一项始终被认为是唯一的,那么应该没有任何可能。
#include <RcppArmadillo.h>
using namespace Rcpp;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::uvec test(arma::vec& x_) {
Rcpp::Rcout << "Input:" << x_.t() << std::endl;
arma::vec x = arma::sort(x_);
Rcpp::Rcout << "Sorted:" << x.t() << std::endl;
arma::uvec o = arma::find_unique(x);
Rcpp::Rcout << "Indices:" << o.t() << std::endl;
return o;
}
/*** R
set.seed(1991)
(v=sample(1:8,20,TRUE))
## [1] 2 2 1 5 7 6 7 6 4 1 5 3 1 4 4 2 8 7 7 8
sort(v)
## [1] 1 1 1 2 2 2 3 4 4 4 5 5 6 6 7 7 7 7 8 8
test(v)
### Received
## 2.0000 2.0000 1.0000 5.0000 7.0000 6.0000 7.0000 6.0000 4.0000 1.0000 5.0000 3.0000 1.0000 4.0000 4.0000 2.0000 8.0000 7.0000 7.0000 8.0000
### Sorted
## 1.0000 1.0000 1.0000 2.0000 2.0000 2.0000 3.0000 4.0000 4.0000 4.0000 5.0000 5.0000 6.0000 6.0000 7.0000 7.0000 7.0000 7.0000 8.0000 8.0000
### Output
## 0 3 6 7 10 12 14 18
*/
关于c++ - arma::find_unique 如何确定唯一索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38903126/
code (m); arma::umat a=trans(M)>M; arma::mat N=a; return Rcpp::wrap(N); ' coxFunc ::from(var)你想要
我有一个矩阵 X,它由 arma::vectorise 函数矢量化。在对转换后的向量 x 进行一些计算后,我想将其整形为 arma::mat。我尝试在 Armadillo 中使用 .reshape 函
我有一个矩阵 X,它由 arma::vectorise 函数矢量化。在对转换后的向量 x 进行一些计算后,我想将其整形为 arma::mat。我尝试在 Armadillo 中使用 .reshape 函
我正在尝试测试 ARMA 模型,并完成此处提供的示例: http://www.statsmodels.org/dev/examples/notebooks/generated/tsa_arma_0.h
时间序列的 ARMA 预测摘要 ( print arma_mod.summary() ) 显示了一些关于置信区间的数字。是否可以将这些数字用作显示预测值的图中的预测区间? ax = indexed_d
开始有 R 经验,但完全是 C++ 新手,我用 RcppArmadillo 编写了一些函数,并且对它的可用性和速度非常热情。我现在想使用函数 RcppArmadillo.package.skeleto
我有大约五年的一年期利率数据。我想为此利率创建一个模型,并且得出的结论是 ARMA(3,2) 和 GARCH(1,1) 是合适的。因此,我使用下面的代码来获得我的估计。 > stibor1ydarma
当尝试将带有 statsmodels 的 ARMA(1,2) 拟合到股票数据时间序列的对数返回时,我收到错误“计算的初始 AR 系数不是平稳的”我认为我尝试分析的时间序列本身是平稳的,并且与白噪声非常
我想预测一个时间序列的返回,我首先拟合了数据集,但当我预测明天的返回时它不起作用。我的代码是 date = datetime.datetime(2014,12,31) todayDat
我正在使用 arma::find_unique,我认为它返回了 vector 中每个唯一值第一次出现的索引,但它似乎返回了其他内容。 这是一个玩具函数: // [[Rcpp::export]] arm
我正在做这个作业,我试图运行这个程序 5000 次,并对模型进行 AR(1) 和 AR(2) 拟合。首先,我定义了一个生成时间序列的函数,如下所示: def ts_gen_ar1(size,sigma
这里有点新,但试图让 statsmodel ARMA 预测工具起作用。我从 Yahoo 导入了一些股票数据,并让 ARMA 给我拟合参数。然而,当我使用预测代码时,我收到的只是一个我似乎无法弄清楚的错
我想预测时间序列数据。我在之前的帖子中读到模块 statsmodels 具有使用 ARMA 方法进行预测所需的工具,这正是我一直在寻找的工具。尽管如此,我在预测数据时遇到了麻烦。有人可以解释模型中使用
data <-c(88, 84, 85, 85, 84, 85, 83, 85, 88, 89, 91, 99, 104, 112, 126, 138, 146,151, 150, 148, 14
我正在尝试设置 arma::mat 的值元素方面,每个元素的值取决于每个元素的多索引(行、列)。 有没有办法在迭代期间检索元素的当前位置? 基本上,我想做点什么like in the sparse m
vector y_long_name 有 100 个成员,我打算只操作它的一个由前三个成员组成的子 vector 。 subvector 函数在我的代码中用作左值: y_long_name.subve
如何将 arma::cx_mat 转换为数组数组? 转换的动机是使用 C 库 libmatio 来输出 .mat 文件。 到目前为止,我已经创建了一个函数来将 arma:cx_mat 转换为 vect
我的问题相当简单:我想使用 statsmodels 定义 ARMA 建模过程中的特定顺序滞后。 假设我有一个时间序列 TS,我想估计以下模型作为示例: TS(t)= c + TS(t-2) + TS(
我想要将 ARMA(p,q) 模型拟合到模拟数据 y,并检查不同估计方法对结果的影响。但是,像这样将模型拟合到同一对象 model = tsa.ARMA(y,(1,1)) results_mle =
是否有任何 C++ 库允许计算时间序列的 ARMA?经过多次搜索尝试后,我一直找不到任何内容。 谢谢! 最佳答案 Cronos是一个用 C++ 编写的支持 ARMA 模型的开源库。虽然它没有任何文档,
我是一名优秀的程序员,十分优秀!