Python 返回排序列表中值的位置

Python 返回排序列表中值的位置,python,Python,我希望我的描述是正确的:我希望根据对象的当前状态、转换矩阵和随机变量(“rv”)来更新对象的状态 举个例子,假设我有一个由N个元素组成的矩阵,它们有三种状态(例如,固态、液态、气态)。每一个状态都有它自己改变状态的概率。与rv比较时的“阈值”确定状态 例如 我想写一个函数,给定这个转移矩阵,一个当前状态和一个rv,以尽可能有效的方式返回新状态(我正在运行许多模拟,实际矩阵比3x3大得多) 这是我的代码,其中“value”是rv,“list”是包含上述值的选定行的排序列表。例如,对于“固体”,列表

我希望我的描述是正确的:我希望根据对象的当前状态、转换矩阵和随机变量(“rv”)来更新对象的状态

举个例子,假设我有一个由N个元素组成的矩阵,它们有三种状态(例如,固态、液态、气态)。每一个状态都有它自己改变状态的概率。与rv比较时的“阈值”确定状态

例如

我想写一个函数,给定这个转移矩阵,一个当前状态和一个rv,以尽可能有效的方式返回新状态(我正在运行许多模拟,实际矩阵比3x3大得多)

这是我的代码,其中“value”是rv,“list”是包含上述值的选定行的排序列表。例如,对于“固体”,列表为:

[0.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;
def返回位置(值,列表):
#从排序列表返回位置i,其中值>=i和

任何想法都很感激

因此,我不确定这是否有用,但这里有一种快速方法,可以使用
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

因此,我不确定这是否有用,但这里有一种快速方法,可以使用
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

您要搜索的是,它在模块中作为
bisect
函数提供

import bisect
l = [2,4,6,8,9,10]

bisect.bisect(l, 3)
>>> 1
如果数字大于最后一个元素,它可以返回大于len(l)的值,但这可以通过检查轻松解决

bisect.bisect(l, 10)
>>> 6

您要搜索的是,它在模块中作为
bisect
函数提供

import bisect
l = [2,4,6,8,9,10]

bisect.bisect(l, 3)
>>> 1
如果数字大于最后一个元素,它可以返回大于len(l)的值,但这可以通过检查轻松解决

bisect.bisect(l, 10)
>>> 6

但是,逻辑是如何选择属性的呢?对不起,我不明白,或者不清楚:我想通过引用RV来选择一个新状态,它是其当前状态的函数。例如,如果当前状态为“固态”,RV(U[0,1])为0.8,则新状态为“气体”我不知道如何在没有循环的情况下做到这一点,我认为循环不是Pythonic的,也不是有效的。我已经开始制作一个函数来进一步演示你想要做什么?我不理解你正在使用的术语,例如RV,它是参考值的缩写吗?这是在哪个研究领域/工作,例如物理?有任何文档吗/您可以链接到的在线参考资料是一个示例或进一步解释这些概念?抱歉,在其他人出现之前只是想提供帮助。谢谢。@downshift应用程序是finance,但我选择了一个物理示例,因为它很简洁。“RV”是随机变量。包含代码片段。是否同时将转换矩阵应用于多个状态?是否重复应用?是否知道需要应用它多少次?但选择属性的逻辑将如何工作?抱歉,我不明白,或者不清楚:我想选择一个新状态h是参考RV的当前状态的函数。例如,如果当前状态为“固态”,且RV(U[0,1])为0.8,则新状态为“气体”我不知道如何在没有循环的情况下做到这一点,我认为循环不是Pythonic的,也不是有效的。我已经开始制作一个函数来进一步演示你想要做什么?我不理解你正在使用的术语,例如RV,它是参考值的缩写吗?这是在哪个研究领域/工作,例如物理?有任何文档吗/您可以链接到的在线参考资料是一个示例或进一步解释这些概念?抱歉,在其他人出现之前只是想提供帮助。谢谢。@downshift应用程序是finance,但我选择了一个物理示例,因为它很简洁。“RV”是随机变量。包含代码片段。是否同时将转换矩阵应用于多个状态?是否重复应用?是否知道需要应用它多少次?不确定我是否足够清楚地指定了问题-我只查看“状态”作为一个布尔值,而不是一个值。@GPB是的,我不是你真正想要的。这相当于用
state
中指定的起始状态运行60个模拟,并累积结果。因为你说你正在运行许多模拟,所以很可能有一种优雅的方式来并行执行它们。不确定我是否指定了p问题很清楚-我只是在看一个“状态”作为一个布尔值,而不是一个值。@GPB是的,我不是你真正想要的。这相当于用
state
中指定的起始状态运行60个模拟,并累积结果。既然你说你正在运行许多模拟,那么很可能有一种优雅的方法来并行执行它们。是的,这似乎有效。我是我将根据我的函数进行基准测试并报告。谢谢你的帮助!是的,这似乎有效。我将根据我的函数进行基准测试并报告。谢谢你的帮助!