Python Array Slice With Comma?

46,145

Solution 1

It is being used to extract a specific column from a 2D array.

So your example would extract column 0 (the first column) from the first 2048 rows (0 to 2047). Note however that this syntax will only work for numpy arrays and not general python lists.

Solution 2

Empirically - create an array using numpy

m = np.fromfunction(lambda i, j: (i +1)* 10 + j + 1, (9, 4), dtype=int)

which assigns an array like below to m

array(
      [[11, 12, 13, 14],
       [21, 22, 23, 24],
       [31, 32, 33, 34],
       [41, 42, 43, 44],
       [51, 52, 53, 54],
       [61, 62, 63, 64],
       [71, 72, 73, 74],
       [81, 82, 83, 84],
       [91, 92, 93, 94]])

Now for the slice

m[:,0]

giving us

array([11, 21, 31, 41, 51, 61, 71, 81, 91])

I may have misinterpreted Khan Academy (so take with grain of salt):

In linear algebra terms, m[:,n] is taking the nth column vector of the matrix m

See Abhranil's note how this specific interpretation only applies to numpy

Solution 3

It slices with a tuple. What exactly the tuple means depends on the object being sliced. In NumPy arrays, it performs a m-dimensional slice on a n-dimensional array.

>>> class C(object):
...   def __getitem__(self, val):
...     print val
... 
>>> c = C()
>>> c[1:2,3:4]
(slice(1, 2, None), slice(3, 4, None))
>>> c[5:6,7]
(slice(5, 6, None), 7)
Share:
46,145
SolarLune
Author by

SolarLune

Updated on January 14, 2022

Comments

  • SolarLune
    SolarLune over 2 years

    I was wondering what the use of the comma was when slicing Python arrays - I have an example that appears to work, but the line that looks weird to me is

    p = 20*numpy.log10(numpy.abs(numpy.fft.rfft(data[:2048, 0])))
    

    Now, I know that when slicing an array, the first number is start, the next is end, and the last is step, but what does the comma after the end number designate? Thanks.

  • SolarLune
    SolarLune about 12 years
    Okay, so I'm trying to understand - the comma is basically giving you two separate slices? EDIT: But it does this for each individual slice? Like c[5:6, 7] will return the seventh index for each fifth value in the c array (like if the fifth value in the c array was another array or list)?
  • SolarLune
    SolarLune about 12 years
    Okay, so if I get this right, a comma will return a column of an array (in its simplest form, a 2D array, for example)?
  • Alessandro De Simone
    Alessandro De Simone over 4 years
    thanks for specifying this syntax will only work for numpy arrays and not general python, I had a bit of headache trying to make it work on vanilla Python.
  • Marco Ottina
    Marco Ottina over 4 years
    I'm confused: how a "syntax stuff" can work only with a package? Shouldn't the "syntax stuff" be accepted in general and so in Vanilla, should it? Is the package numpy modifying the interpreter / compiler? (I come from Java and C, so in my head the syntax is strongly fixed and unmovable)
  • user976850
    user976850 about 4 years
    It works with the package because they've implemented the relevant behavior for their __getitem__ function. Python simply passes in the relevant arguments, but regular 2D lists won't know what to do with it. See more here stackoverflow.com/questions/21165751/…
  • Seng Cheong
    Seng Cheong over 3 years
    To be clear, there's no syntactic difference. Python supports using any object in the brackets, and numpy is choosing to use a tuple.
  • eagle33322
    eagle33322 almost 3 years
    This should be top since top link is dead.
  • Mark Ransom
    Mark Ransom almost 2 years
    @user976850 does Python even have 2D lists? You can make a list of lists but that's not the same thing.