【问题标题】:How to get the loop to output the correct array sizes?如何让循环输出正确的数组大小?
【发布时间】:2022-01-01 22:38:12
【问题描述】:

在我的循环中,我需要输出三个不同的变量,A,V 和 Alpha 的平均值。在我只为每个值获取一个值之前,但通过使用 append 函数解决了这个问题。

An=np.array([51,101,201,301,501])#No. agents
t=10#time steps
MM=3#agent memory
r=5#repetitions
A=np.array([])
V=np.array([])
Alpha=np.array([])
Vav=np.array([])
for agentcount in np.arange(0,5): #count over agents
    N=An[agentcount]

    for M in np.arange(1,MM+1):
        for crep in np.arange(1,r+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 
             payout=np.zeros([2,N])#empty payout record
             for tc in np.arange(1,t+1):
                  cc=np.abs((1+ np.dot((2**(np.arange(0,M))),win)))
                  nex1=s1[cc-1,:].reshape(501)
                  nex2=s2[cc-1,:].reshape(501)
                  nexts=np.stack((nex1,nex2),axis=0)
    
                  for cn in np.arange(0,N+1): #better strat
                      if (payout[0,cn-1]>payout[1,cn-1]):
                          Next=nex1
                      else:
                          Next=nex2
                  Asum=np.sum(Next)/N
                  A=np.append(A,Asum)
                  winning=(A<0.5).astype(int)
                  winning=np.transpose(winning)
                  payout=payout+(nexts==winning)#update record
              V=np.append(V,np.var(A))
              Vav=np.append(Vav,np.mean(V))
          Alpha=np.append(Alpha,2**M/N)

使用缩进,我希望 A、Vav 和 Alpha 分别是大小为 t、r 和 MM 的一维数组。但对于 A,我的尺寸为 trMM,Vav 尺寸为 r*MM。如何使尺寸与循环的某些部分相对应? 谢谢

【问题讨论】:

  • 缩进有些问题。 for crep in np.arange(1,r+1): 后面的行应该缩进 1 级...你能解决这个问题吗?不确定最后三行计划的哪些缩进。

标签: python python-3.x loops for-loop


【解决方案1】:

我不完全确定您的目标是什么。但是,当您在循环外初始化 AVavAlpha 并在每次传递期间添加一个值时,数组长度符合预期。我希望简化您的代码可以澄清事情:

An=np.array([51,101,201,301,501])#No. agents
t=10#time steps
MM=3#agent memory
r=5#repetitions
A=np.array([])
V=np.array([])
Alpha=np.array([])
Vav=np.array([])
for agentcount in np.arange(0,5): #count over agents
    for M in np.arange(1,MM+1):
        for crep in np.arange(1,r+1): 
             for tc in np.arange(1,t+1):
                  A=np.append(A,'Asum')
             V=np.append(V,'np.var(A)')
             Vav=np.append(Vav,'np.mean(V)')
        Alpha=np.append(Alpha,'2**M/N')

例如,在外循环的每个MM-passes 中,一个值被添加到Vavr-times。

要获取(例如)长度为t 的数组A,需要在循环t 之前初始化A。但这意味着A 每次都会被覆盖......(这可能不是故意的?)

【讨论】:

  • 谢谢,我仍然很困惑,因为在 Matlab 中代码 A(tc)=np.sum(Next)/N 会重复总和 tc 次并给出一个 tc 大小的数组。我将如何在 python 中执行此操作? A[ct]=" 会报错
猜你喜欢
  • 1970-01-01
  • 2016-08-16
  • 2013-07-21
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多