Is it possible you were looking at the bid/ask only at a specific exchange rather than the NBBO?
If that was not the case, then I suspect the other players who took your trades simply determined that the actual spread could have been smaller, but with no competing bids/asks there was no incentive for them to quote better prices. The counter party who took each side your trades was not necessarily the same counter party.
To give a sort of illustration. In your example the bid/ask was 9.70/10.90. Let's say a particular entity's model said the acceptable bid/ask range was 10.40/11.00, which would make their bid the best bid, but if there were no other parties bidding better than 9.70, then they wouldn't have to improve their bid, thus they quote 9.70 and are the best bid (even though their model at that moment would have allowed them to go up to 10.40). They will offer the best bid provided it's within their model, but they will only make their "best" bid as good as is necessary to be at the top of the book. When you came along with a 10.35, their model said this was within acceptable range and took it. Similar happened on the other side and it wasn't necessarily the same counter-party, just 2 entities with 2 different models that at the time your orders were sent happened to fall within their model's parameters, but they don't always quote the limits of their models, they quote the minimum they can get away with (due to competition) that still falls within their model's range.
Perfectly understandable behavior. You need to understand the essence of the algorithm. You need to understand its desires, what motivates it to act, what makes it aggressive or passive, and that when the algorithm appears to be generous it may only be doing so to lure you in to its jaws. This is the tao of the algorithms.