繁体   English   中英

如何从python中的列表中选择特定值

[英]How to select a specific value from a list in python

所以我有以下MCMC采样器-

import numba
import numpy as np
import scipy.stats as stats
from scipy.stats import multivariate_normal
import seaborn as sns
import pandas as pd
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import random
import math

def targ_dist2(x1,x2):

    target2 = (mlab.bivariate_normal(x1, x2, 1.0, 1.0, -6, -6, 0.9) + 
mlab.bivariate_normal(x1, x2, 1.0, 1.0, 4, 4, -0.9) + 
mlab.bivariate_normal(x1, x2, 1.0, 1.0, 0.0, 0.0))/3
    return target2

nSamples = 5000
propSigma = 2      
x = np.zeros((nSamples+1,2))
xCurrent = stats.uniform.rvs(loc=-5, scale=10, size=2, random_state=None)
dims = range(2)

#INITIAL VALUES
t = 0
x[t,0] = xCurrent[0]
x[t,1] = xCurrent[1]

while t < nSamples:
    t = t + 1
    for iD in range(2):
        xStar = np.random.normal(x[t-1,iD], propSigma)
        alpha = min(1, (targ_dist2(xStar, x[t-1,iD!=dims]) / targ_dist2(x[t-
        1,iD], x[t-1,iD!=dims])))

        #ACCEPT OR REJECT
        u = random.uniform(0, 1)
        if u < alpha:
            x[t,iD] = xStar
        else:
            x[t,iD] = x[t-1,iD]

我的错误是我在alpha方程中有!=的地方。 基本上,我想在循环中选择不等于“ iD”值的“ dims”值。 因此,例如,如果循环正在通过值iD = 0进行操作,则我希望在上面的alpha方程中使用值1代替iD!= dims(如果有意义)。 有一般的方法吗? 我希望将此算法扩展到多个维度...

您所拥有的并没有什么意义,因为您正在将范围与值进行比较。 iD是一个int但是dims是一个range因此比较它们实际上没有任何意义。

也许像这样会更好

def get_opposite(iD, dims):
    for x in dims:
        if x != iD: #Beware here for multi dimentional extension
            return x

然后将违规行更改为:

... x[t-1,get_opposite(iD,dims)]... 

不知道我能得到什么,但是如果只是打印相反的iD值(如果它是range(2) ,则为1和0):

for i in range(2):
  print("i value: ", i)
  print("opposite:" ,1- i)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM