Python实现系数矩阵运算时while循环无法遍历i值问题求助
问题原因
你写的return sum_i语句缩进错误,被包含在了while循环的内部逻辑里:第一次循环执行完累加、i自增后,函数就会直接返回结果,自然不会执行后续的循环。另外你定义的M矩阵只有3行,循环上限写5会触发数组越界错误。
修复方法
调整return的缩进位置到循环外,同时把循环上限改为3即可:
def T(p,q): sum_i = 0 i = 1 while i <=3: # 匹配矩阵行数,修改上限为3 sum_i = sum_i + ((M1(i)*p**M2(i))*((1-p)**M3(i))*(q**M4(i))*((1-q)**M5(i))) i = i +1 return sum_i # 缩进调整到和while同级,循环结束后再返回
更优的求解方案
你目前写5个独立函数取矩阵元素的写法冗余度很高,可以直接用numpy的向量化运算一次性完成所有计算,不需要手动写循环,逻辑更清晰也不容易出错:
import numpy as np # 全局只定义一次矩阵即可,不需要重复创建 M = np.array([[1,3,0,4,0,0],[3,3,1,4,0,0],[4,4,0,3,1,0]]) def T(p,q): # 按列取所有行的参数,批量计算每一项后直接求和 items = M[:,0] * (p ** M[:,1]) * ((1-p) ** M[:,2]) * (q ** M[:,3]) * ((1-q) ** M[:,4]) return items.sum() print(T(0.6,0.45))
内容的提问来源于stack exchange,提问作者Mikey
相关产品推荐
相关产品推荐

