如何调整循环结构使变量A返回长度为t的求和结果数组
代码修改方案
修复后的可运行代码如下:
import numpy as np An=np.array([51,101,201,301,501]) t=100 MM=9 Mi=1 rep=5 for agentcount in np.arange(0,5): #count over agents N=An[agentcount] for M in np.arange(Mi,MM+1): for crep in range(1,rep+1): win=(np.random.rand(M,1)>0.5).astype(int) #winning record s1=(np.random.rand(2**M,N)>0.5).astype(int) #random strat s2=(np.random.rand((2**M),N)>0.5).astype(int) #alternative strat payout=np.zeros([2,N]) #empty payout record # 提前初始化形状为1×t的A数组 A = np.zeros((1, t)) for ct in range(1,t+1): #timesteps cc=np.abs((1+ np.dot((2**(np.arange(0,M))),win))) #pick next strat nex1=s1[cc-1,:] nex2=s2[cc-1,:] # 修正原无效判断逻辑,对比两个策略收益选更优 if payout[0].mean() > payout[1].mean(): Next = nex1 else: Next = nex2 # 把当前迭代结果存入A的对应位置,ct从1开始对应数组索引0 A[0, ct-1] = np.sum(Next)/N # 可在此处补充payout收益更新逻辑,匹配你的业务需求 # payout[0] += s1对应收益计算逻辑 # payout[1] += s2对应收益计算逻辑
核心修改说明:
- 预先开辟存储空间:在ct循环执行前初始化全零的1×t数组A,避免每次迭代直接覆盖变量导致历史值丢失
- 修正语法逻辑错误:修复原代码多处缩进错误、
payout[0,cn-1]>payout[0,cn-1]的无效自身比较问题,删除存在索引越界风险的冗余cn循环 - 结果按位存储:每次ct迭代完成后,将计算得到的平均值写入A数组的对应索引位置,跑完t次循环后即可得到符合要求的1×t结果数组
- 如果你需要保留所有agent、M、重复实验的结果,可把A的初始化维度调整为
(len(An), MM-Mi+1, rep, 1, t),按嵌套层级对应索引赋值即可
内容的提问来源于stack exchange,提问作者JakeB18900
相关产品推荐
相关产品推荐

