It is redundant to independently check if b is 3 and state is 1, and if so set c to 1, and check if b is 3 and state is 0, and if so set c to 1.
Fold these into one check.
Additionally, to reduce number of array lookups, fold the remaining two operations into one. using a bitwise or
Thirdly, in newer numpy versions numpy.where() is not necessary in this case, and is slower than using the array[array condition] syntax
EDIT: correction to the "revert convolution change" commit message, it turns out that if you just shift the filter to the up-left by one the scipy.signal convolution method works. Still not no-changes compatible with the other code so not including.
It is redundant to independently check if b is 3 and state is 1, and if so set c to 1, and check if b is 3 and state is 0, and if so set c to 1. Fold these into one check. Additionally, to reduce number of array lookups, fold the remaining two operations into one. using a bitwise or Thirdly, in newer numpy versions numpy.where() is not necessary in this case, and is slower than using the array[array condition] syntax
EDIT: correction to the "revert convolution change" commit message, it turns out that if you just shift the filter to the up-left by one the scipy.signal convolution method works. Still not no-changes compatible with the other code so not including.