This:
numpy.bmat([[numpy.zeros(appropriate_shape), A], [B, C]])
works, but I'm not sure how to avoid the creation of that big, useless array of zeros. Also, it returns a matrix instead of an array, so make sure to call asarray on it if you want an array.