Я продолжаю получать
TypeError: 'int' object is not subscriptable
в моей функции evenly (). equall () и gauss () работают нормально, если я закомментирую функцию evenly, и все, что я сделал, это скопировал из них код и использовал свою функцию stepe () вместо step () или stepn ()
import numpy as np
import matplotlib.pyplot as plt
from numpy.random import rand,seed,randn
steps = 1
walks = 10000
walk = np.zeros(steps + 1)
def step():
if rand() < 0.5:
return 1.0
return -1.0
def stepn():
return randn() + 0.5
def stepe():
return (6*(rand()-0.5))
def equall(walks,steps):
l = []
for w in range(walks):
for s in range(steps):
walk[s+1] = walk[s] + step()
l.append(walk[steps])
return l
def gauss(walks,steps):
l = []
for w in range(walks):
for s in range(steps):
walk[s+1] = walk[s] + stepn()
l.append(walk[steps])
return l
def evenly(walk,steps):
l = []
for w in range(walks):
for s in range(steps):
walk[s+1] = walk[s] + stepn()
l.append(walk[steps])
return l
plt.figure(figsize=(10,7))
plt.hist(equall(walks,steps),bins=15)
plt.show()
plt.hist(gauss(walks,steps),bins=15)
plt.show()
plt.hist(evenly(walks,steps),bins=15)
plt.show()
Вы имеете в виду range(len(walk))
вместо range(walk)
? У вас также есть опечатка во внешнем цикле for
, в котором вы пишете walks
вместо walk
.
def evenly(walk,steps):
Здесь параметр walk
(вместо walks
) маскирует внешнюю переменную с тем же именем и определяется для последующего оператора walk[s+1] = walk[s] + stepn()
. Думаю, это должен быть walks
не могли бы вы опубликовать полную трассировку стека, пожалуйста