Do we really need to use numpy for this? It might be nice to skip numpy as a dependency if there isn't a great need for it.