Issue
Creating a 2D array such as
x = [range(i, i+10) for i in xrange(1,100,10)]
and indexing using the colon operator like this
>>> x[2][:]
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
works as expected. It returns all of row 2.
However, if I want to retrieve all of column 2, I would instinctively do
>>> x[:][2]
But this also returns
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
What is the reasoning behind this? I would intuitively think that this returns the column 2 of each row.
(Also, I am aware I can use numpy to do x[:,2] or I could use list comprehensions to accomplish this, that's not my question)
Solution
The reason is that [:]
just means "everything", and that the two indexing operations in a row are completely independent.
y = x[2][:]
is
tmp = x[2]
y = tmp[:] # this only makes a copy, does nothing else
Similarly,
y = x[:][2]
is
tmp = x[:] # this only makes a copy, does nothing else
y = tmp[2]
in effect both just mean
y = x[2]
There is no 2D indexing going on at any point, Python doesn't have 2D indexing (although numpy has hacks that make it work like there is actual 2D indexing going on).
Answered By - RemcoGerlich
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.