Regarding the TODO I think that's pretty fast already as I believe the `ndarray.shape` tuple is a stored quantity (or at the very least only calculated once and then cached).

The only thing that occurs to me to speed up the operations here would be
```
shape = self.data.shape
self.nobjects = shape[0]
self.ncols = shape[1]
```
...since the Python interpreter can lose time navigating namespaces (dots `.` are slightly costly).  But this is hardly going to save much time here.  I may be missing more, but I can't think of anything.