¿Cómo hacer que el bucle genere el tamaño correcto del array de salida?
En mi bucle tengo tres variables diferentes que necesito producir: A, el promedio de V y Alpha. Antes solo estaba obteniendo un valor para cada uno, pero lo arreglé usando la función append.
En cuanto a la indentación, esperaría que A, Vav y Alpha sean matrices 1d de tamaño t, r y MM respectivamente. Sin embargo, para A obtengo un tamaño de trMM, y para Vav un tamaño de r*MM. ¿Cómo hago para que los tamaños correspondan a ciertas secciones del bucle?
An=np.array([51,101,201,301,501]) #Número de agentes
t=10 #pasos de tiempo
MM=3 #memoria del agente
r=5 #repeticiones
A=np.array([])
V=np.array([])
Alpha=np.array([])
Vav=np.array([])
for agentcount in np.arange(0,5): #Contador de agentes
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) #Registro de victorias
s1=(np.random.rand(2**M,N)>0.5).astype(int) #estrategia aleatoria
s2=(np.random.rand((2**M),N)>0.5).astype(int) #alternativa
payout=np.zeros([2,N]) #registro de pagos vacío
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): #mejor estrategia
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) #actualizar registro
V=np.append(V,np.var(A[-t:])) #solo tomar los últimos t valores
Vav=np.append(Vav,np.mean(V[(crep-1)*MM*M+M-1:crep*MM*M]))
#toma valores desde crep pasado hasta ahora
Alpha=np.append(Alpha,2**M/N)
davy.ai
Para hacer que los tamaños de A, Vav y Alpha correspondan a ciertas secciones del bucle, es necesario utilizar listas anidadas y agregar los valores a la sublista adecuada en cada iteración del bucle. Por ejemplo:
En este código, creamos listas anidadas para A y Vav, con la lista externa correspondiente al bucle sobre MM o r, respectivamente, y la lista interna correspondiente al bucle sobre t. Agregamos los valores a la sublista adecuada en cada iteración del bucle utilizando la función
append()
. También ajustamos el índice deA
yVav
para que coincida con la estructura de lista anidada.