Numpy Array объект, преобразующий в объект List в функции?
Я пытаюсь создать одномерный клеточный автомат. Для данного правила (от 1 до 255) число преобразуется в соответствующее 8-значное двоичное число и сопоставляется со всеми 8 возможными комбинациями 0 и 1.
Код, кажется, работает нормально, не помещая его в функцию. Тем не менее, когда я запускаю вторую половину, она дает мне AttributeError: объект list не имеет атрибута shape. Я определил "значения" как массив Numpy, и если я запускаю код без пошаговой части, он остается массивом. Я не уверен, что происходит. Любое руководство будет оценено!
def cellular_step(value, rule=110):
blist = np.unpackbits(np.uint8(rule))
truple = [(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)]
lookup_dict = {}
for indx,lmr in enumerate(truple):
lookup_dict[lmr] = blist[indx]
next_step = np.array([],dtype=np.int8)
for i in range(value.shape[0]):
indices = range(i-1,i+2)
neighbourhood = value.take(indices,mode='wrap')
b = tuple(neighbourhood)
a = lookup_dict.get(b)
next_step = np.append(next_step,a)
return[next_step]
value = np.zeros(5, dtype=np.int8)
value[ len(value)//2 ] = 1
nsteps = 10
grid = np.ndarray( [nsteps,len(value)], dtype=np.int8)
for n in range(nsteps):
value = cellular_step(value,rule=30)
grid[n,:] = value
plt.imshow(grid)
2 ответа
Почему ты return[next_step]
?
дела return next_step
априори то, что вы ищете.
Я определил "значения" как массив Numpy, и если я запускаю код без пошаговой части, он остается массивом.
Вообще-то нет. Увидеть,
>>> type(cellular_step(value, rule=30))
<type 'list'>
В конце cellular_step
, вы вернули список, который затем присваивается переменной value
, таким образом value
больше не является массивом Numpy и, следовательно, не имеют атрибута shape
,