我试图在Rcpp中编写一个Sequential Monte Carlo函数,我遇到了以下问题:
我通过以下方式创建了一个向量:
NumericVector R_t(Part*Ttau);
Run Code Online (Sandbox Code Playgroud)
我想填充矢量的部分块.应该是这样的:
for (int i=0;i<Part;i++){
R_t[i]=runif(1,0,2);
}
Run Code Online (Sandbox Code Playgroud)
我第二次想拥有
for (int i=Part+1;i<2*Part;i++){
R_t[i]=runif(1,0,2);
}
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.我可以在每次迭代中用新的值替换旧值,但是每次迭代我都需要旧的值.当我尝试编译时,我收到以下错误:
cannot convert 'Rcpp::NUmericVector {aka Rcpp::Vector<14, Rcpp::PrserveStorage>}' to 'Rcpp::traits::storage_type<14>:: type {aka double}' in assignment
Run Code Online (Sandbox Code Playgroud)
使用尺寸为Part和Ttau的二维矩阵替换矢量会更容易吗?我想避免这最后一个选择.
很抱歉,如果这已经得到解答,但我没有找到任何接近这个的rcpp
我有兴趣计算以下数量
B(i) = \sum_{j < i}(x_i-x_j)exp^{-\beta(x_i - x_j)}
这是计算Hawk过程可能性的一个参数的梯度的一部分(更多信息可以在这里找到:http://www.ism.ac.jp/editsec/aism/pdf/031_1_0145.pdf).
Beta只是解决问题的常数,x_i是我的第i个数据点.
我试图使用以下代码块计算RCPP中的上述数量:
for( int i = 1; i< x.size();i++) {
double temp=0;
for(int j=0; j<=i-1;j++){
temp+=(x[i]-x[j])*exp(-beta*(x[i]-x[j]));
}
Run Code Online (Sandbox Code Playgroud)
但效率极低且速度慢.关于如何加速这个公式的任何建议?
我正在尝试在 Julia 中构建一个 Dirichlet Process Gibbs Sampler,并将每个集群表示为一个对象。我做了以下事情:
using BayesianNonparametrics
using DataFrames
using Distances
type cluster
m::Vector
Sigma::LinAlg.Cholesky
nu::Int
kappa::Int
nk::Int
end
function logPredPdf(f::cluster,x::Array{Float64,1}):
kappa <- f.kappa
S <- f.Sigma
mu <- f.m
nu <- f.nu
d <- size(x)[1]
v = nu-d+1
U = sqrt((1+1/kappa)/v) * LinAlg.lowrankdowndate!(S, sqrt(f.kappa)*mu)[:U]
x = x - m
Q = \(transpose(U),x)
q= vecdot(Q,Q)
o = -log(1+q/v)*((v+d)/2)
c = lgamma((v+d)/2)-lgamma(v/2)-(d*log(v*pi)+2*sum(log(diag(U))))/2
y = c + o
return y
end
data = readtable("PCA_transformed_data_gt1000.csv",header= true);
data = delete!(data, :1);
n,d …Run Code Online (Sandbox Code Playgroud)