Python Array Slice With Comma?
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 thenth
column vector of the matrixm
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)
SolarLune
Updated on January 14, 2022Comments
-
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 about 12 yearsOkay, 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 about 12 yearsOkay, 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 over 4 yearsthanks 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 over 4 yearsI'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 about 4 yearsIt 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 over 3 yearsTo be clear, there's no syntactic difference. Python supports using any object in the brackets, and numpy is choosing to use a tuple.
-
eagle33322 almost 3 yearsThis should be top since top link is dead.
-
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.