7.13. CA Tables¶
The function we have so far works if the CA is “totalitic”, which means that the rules only depend on the sum of the neighbors. But most rules also depend on which neighbors are on and off. For example, 100 and 001 have the same sum, but for many CAs, they would yield different results.
We can make step2
more general using a window with elements [
Here’s the more general version of step2
:
def step3(array, i, window=[4,2,1]):
row = array[i-1]
c = np.correlate(row, window, mode='same')
array[i] = table[c]
The first two lines are the same. Then the last line looks up each element from c
in table
and assigns the result to array[i]
.
Here’s the function that computes the table:
def make_table(rule):
rule = np.array([rule], dtype=np.uint8)
table = np.unpackbits(rule)[::-1]
return table
The parameter, rule
, is an integer between rule
into an array with a single element so we can use unpackbits
, which converts the rule number to its binary representation. For example, here’s the table for Rule 150:
>>> table = make_table(150)
>>> print(table)
[0 1 1 0 1 0 0 1]
The code in this section is encapsulated in the Cell1D
class, defined in Cell1D.py
in the repository for this book.