OK, just for clarification here, let's make a simple example
A=diag(arange(0,10,1))
gives
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 4, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 6, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 7, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 8, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 9]])
then
A[0][0:4]
gives
array([0, 0, 0, 0])
this is the first line, elements from 0 to 3. But
A[0:4][1]
does not give the first 4 lines, the 2nd element in each. Instead, we get
array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0])
ie the entire second column.
A[0:4,1]
gives
array([0, 1, 0, 0])
I am sure that there is a very good reason for this and which makes sense for programmers, but for those of us who are uninitiated in this great religion, this can be quite confusing.