Объект Numpy Array, преобразующий объект List в функцию? - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь создать одномерный клеточный автомат.Для данного правила (от 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 ]

0 голосов
/ 09 октября 2018

Почему ты return[next_step]?

Выполнение return next_step - это то, что вы ищете априори.


Я определил 'values' как массив Numpy, и если я запускаю код без шага, он остается в виде массива.

На самом деле нет.Смотри,

>>> type(cellular_step(value, rule=30))
<type 'list'>
0 голосов
/ 09 октября 2018

В конце cellular_step вы вернули список, который затем присваивается переменной value.Таким образом, value больше не является массивом Numpy и, следовательно, не имеет атрибута shape.

...