可以将Code从R转换为Python等价物

时间:2018-02-03 12:38:43

标签: python r

我试图从R翻译我的代码。

..........

me.G5 = read.csv('xxxx.csv',sep=';',header=FALSE)[,2:3]
me.x = me.G5[,1]
me.w = me.G5[,2]
int.x = c((me.x/2+.5)*0.1,0.1+(me.x/2+.5)*0.9,1+(me.x/2+.5)*9,10+(me.x/2+.5)*90,100+(me.x/2+.5)*900)
int.w = c(me.w*0.1/2,me.w*.9/2,me.w*9/2,me.w*90/2,me.w*900/2)

### pdf
me.pdf  = function(MF,l) {
    pdf = function(x){
            X   = matrix(NaN,length(x),length(l))
            for(i in 1:length(l)) X[,i] = MF[[i]](x)
            exp(l%*%t(X))
        }
    pdf
}
  ### l
 me.l   = function(MF,mt,sv=NA,tol=1e-10) {
    V   = mt[2:length(mt)]
    if(is.na(sv[1])) l  = rep(0,length(V)) else l = sv[-1]      
    X   = matrix(NaN,length(int.x),length(l))
    for(i in 2:length(MF)) X[,i-1]  = MF[[i]](int.x)
    run = 0;sig = 1
    while((max(abs(sig))>tol)&(run<40)) {
            m1  = as.vector(exp(l%*%t(X))*int.w)
            g   = m1%*%t(t(X)-V)
            G   = (t(X)-V)%*%(m1*t(t(X)-V))
            sig = solve(G,-t(g))
            l   = l + sig
            l   = as.vector(l)
            run = run +1            
        }
    m1  = as.vector(exp(l%*%t(X))*int.w)
    l0  = -log(sum(m1))
    c(l0,l) 
}

到Python(我是Python的新手,所以请原谅我的愚蠢错误)

def mepdf(MF,l):
def pdf(x):
    X=np.array(np.nan,length(x),length(l))
    for i in (1, length(l)):
        X[:i] = MF[[i]](x)
        exp(l *  X.transpose())

    return pdf

def mel(MF,mt,sv=np.na, tol=1e-10):
V = mt[2: length(mt)]
if()
X=np.array(np.nan, length(x),length(l))
for i in (2, length(MF)) X[:i-1] = MF[[i]](x)
run=0
sig=1
while((max(abs(sig))>tol)&(run<40)):
    m1= as.vector(exp(l * X.transpose())* w)
    g= m1 * (X.transpose()-V).transpose()
    G= (X.transpose()-V) * (m1* (X.transpose()-V).transpose())
    sig = solve(G, -g.transpose())
    l= l + sig
    l = as.vector(l)
    run = run + 1

m1= as.vector(exp( l * X.transpose())* w)
l0 = -log(sum(m1))
c= l0+l

我知道他们犯了很多错误,但我不知道我怎么能做得更好。 或者我认为我可以通过像Rcpp这样的包来做到这一点。 ....... 也许这不可能像R一样,我真的不知道。 ........ 这是一种统计方法。

R控制台中的执行代码是:

->l1= me.l(MPO[1:3],c(1,5,26))
 > x= seq(0,10,1e4)
 > plot(x,me.pdf(MPO[1:3],l1)(x),type='l',lwd=2)
 > lines(x,dnorm(x,5,1),col='red')
 > MPO =list();
 > MPO[[1]] = function(x) 1
 > MPO[[2]] =function(x) x
 > MPO[[3]] = function(x) x^2
 > MPO[[4]] =function(x) x^3
 > MPO[[5]] = function(x) x^4
 >plot()

我得到一个正态分布图作为情节.... 这是一个熵

0 个答案:

没有答案