#python #python-3.x #loops #for-loop
Вопрос:
В моем цикле у меня есть три разные переменные, которые мне нужно вывести: A, среднее значение V и Альфа. Раньше я получал только одно значение для каждого, но исправил это с помощью функции добавления.
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 будут иметь размер 1d массивов t, r и ММ соответственно. Но для A я получаю размер t r ММ и размер Vav r*ММ. Как мне получить размеры, соответствующие определенным участкам петли?
Спасибо
Комментарии:
1. Что-то не так с углублениями. Следующие строки
for crep in np.arange(1,r 1):
должны быть с отступом 1 уровень… Не могли бы вы это исправить? Не уверен, какие отступы запланированы для последних трех строк.
Ответ №1:
Я не совсем уверен, чего вы добиваетесь. Но когда вы инициализируете A
Vav
и Alpha
выходите за пределы своих циклов и добавляете значение во время каждого прохода , длина массива соответствует ожиданиям. Я надеюсь, что упрощение вашего кода прояснит некоторые вещи:
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')
Например, значение добавляется Vav
r
-раз во время каждого MM
прохода внешнего цикла.
Чтобы получить (например) массив A
длины t
, потребуется инициализировать A
его непосредственно перед циклом t
. Но это означало A
бы, что каждый раз это перезаписывается… (и это, вероятно, не подразумевается?)
Комментарии:
1. Спасибо, я все еще в замешательстве, потому что в Matlab код A(tc)=np.сумма(Следующая)/N повторит сумму tc раз и даст массив размером tc. Как бы я сделал это на python? A[ct]=» выдаст ошибку