为什么我的函数第二次从python while循环中调用时会崩溃?

为什么我的函数第二次从python while循环中调用时会崩溃?,python,arrays,numpy,while-loop,Python,Arrays,Numpy,While Loop,我试图在Python3.8中使用一个包含以下实体的简单系统来模拟细胞系统的Gillespies算法:酶、底物、酶-底物复合物、产物 我有以下代码,用于计算一系列反应的倾向函数,这些反应表示为数组的行: propensity = np.zeros(len(LHS)) def propensity_calc(LHS, popul_num, stoch_rate): for row in range(len(LHS)): a = stoch_rate[row

我试图在Python3.8中使用一个包含以下实体的简单系统来模拟细胞系统的Gillespies算法:酶、底物、酶-底物复合物、产物

我有以下代码,用于计算一系列反应的倾向函数,这些反应表示为数组的行:

propensity = np.zeros(len(LHS))

def propensity_calc(LHS, popul_num, stoch_rate):
    for row in range(len(LHS)):     
            a = stoch_rate[row]        
            for i in range(len(popul_num)):      
                if (popul_num[i] >= LHS[row, i]):             
                    binom_rxn = (binom(popul_num[i], LHS[row, i]))    
                    a = a*binom_rxn            
                else: 
                    a = 0   
                    break 
            propensity[row] = a
    return propensity.astype(float)
输入数组如下所示:

popul_num = np.array([200, 100, 0, 0])
LHS = np.array([[1,1,0,0], [0,0,1,0], [0,0,1,0]])
stoch_rate = np.array([0.0016, 0.0001, 0.1000])
函数按预期工作,直到我尝试在以下while循环中调用它:

while tao < tmax: 
propensity_calc(LHS, popul_num, stoch_rate)
a0 = sum(propensity)
if a0 <= 0:
    break
else:
    t = np.random.exponential(a0)   
    print(t)   
    # sample time system stays in given state from exponential distribution of the propensity sum. 
    if tao + t > tmax: 
        tao = tmax
        break
j = stats.rv_discrete(name="Reaction index", values=(num_rxn, rxn_probability)).rvs()   # array of reactions increasing by 1 until they get to the same length/size as rxn_probability
print(j)
tao = tao + t       
popul_num = popul_num + state_change_matrix[j]      # update state of system/ popul_num
当我在while循环中运行调用calc_-propensity函数的代码时,它通过while循环的第一次迭代,出现以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
该错误首先在calc_倾向函数的下一行抛出:

if (popul_num[i] >= LHS[row, i]):
但是由于某种原因,代码一直在运行,直到它到达calc_倾向函数中的同一行,但是在第二个函数中调用while循环,我不明白为什么


cheers

首先,if语句中的值似乎不用于if条件。您应该使用.any或.all函数。以下链接说明ValueError代表什么:


您不应该将len与numpy数组一起使用,请尝试myarray.shape[dimension]而不是请回答您的问题并正确设置代码格式。Python是缩进敏感的,目前有几个部分的语法不正确。这是否回答了您的问题?在我看来,popul_num和/或LHS对象并不是你想象的那样。在它崩溃的行之前打印它,可以让您了解您实际要比较的内容。它运行正常。我对使用未定义binom的内容进行了注释,您必须进行调试,首先在错误发生之前识别问题变量。在类似>=的比较中使用numpy数组时,会出现类似这样的错误。结果是一个布尔数组,不能在if语句中使用。该语句中被索引的数组的维度肯定发生了变化。从外观上看,Popup_num应该是秩1数组,而LHS应该是秩2数组。在这种情况下,比较是非常好的,所以我想问题更多的是,这些对象实际上并不是它们应该得到的东西,所以我非常感谢这些建议!我只是不知道为什么calc_倾向函数在没有从while循环内部调用时运行良好,但在调用时崩溃?
if (popul_num[i] >= LHS[row, i]):