我希望我能正确地描述这一点:我希望根据对象的当前状态,转换矩阵和随机变量来更新对象的状态(" rv&# 34)。
作为一个例子,假设我有一个N元素矩阵,有三种状态(比如,Solid,Liquid,Gas)。每个州都有自己改变国家的概率。 A'阈值'当与rv相比时确定状态。
例如,
Solid Liquid Gas
Solid .50 .75 1.00
Liquid .25 .50 1.00
Gas .15 .35 1.00
我想编写一个给出这个转换矩阵,当前状态和rv的函数,以尽可能高效的方式返回新状态(我正在运行许多模拟,并且实际矩阵比3×3)。
这是我的代码,其中'值'是rv,'列表'是包含上述值的选定行的排序列表。 EG,for" Solid"清单是:
[50,.75,1.0]
def return_location(value, list):
# Returns location i from sorted list where value is >= i and < i+1
len = length(list)
for i in range(0,(len-1)):
if value < list[i]
return(i)
break;
任何想法都赞赏!
答案 0 :(得分:0)
所以,我不确定这是否有用,但是这里有一种快速方法可以使用numpy.random.multinomial
将每个转换行应用到包含总体的状态向量。
import numpy as np
transition = [
[0.50, 0.25, 0.25],
[0.25, 0.25, 0.50],
[0.15, 0.35, 0.50]
]
state = [10, 20, 30] # 10 solid, 20 liquid, 30 gas
def update_state(state, transition):
return sum(np.random.multinomial(s, r) for s, r in zip(state, transition))
print update_state(state, transition) # [12 17 31] - 12 solid, 17 liquid, 31 gas
答案 1 :(得分:0)
您要搜索的内容为binary search,模块bisect中提供bisect
函数
import bisect
l = [2,4,6,8,9,10]
bisect.bisect(l, 3)
>>> 1
如果数字大于最后一个元素,它可以返回len(l)以上,但这可以通过检查轻松解决
bisect.bisect(l, 10)
>>> 6