使用元组解包的python list / numpy数组索引?

时间:2016-02-11 10:18:22

标签: python numpy

我想知道是否可以在"索引中使用元组解包从...到#34; 这种样式,所以使用inds = (a,b),{{1}会导致M[*inds]

我经常有元组,其中包含我用来将数据切割成一些有趣子集的索引,并且会认为像上面提到的那样方便。有没有办法做到这一点?

感谢输入

2 个答案:

答案 0 :(得分:3)

您可以使用元组解包,但必须将它们解压缩到slice,然后使用切片进行索引:

>>> A = list(range(10))
>>> inds = 3, 6
>>> A[slice(*inds)]
[3, 4, 5]

也适用于numpy

>>> B = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> ind_x, ind_y = (0,2), (1,None)
>>> B[slice(*ind_x),slice(*ind_y)]
array([[2, 3],
       [5, 6]])

请记住,A[start:stop:step]只是A[slice(start,stop,step)]的语法糖。

答案 1 :(得分:0)

您无法使用tuples(至少不是以开始 - 停止 - 步骤的方式)。但您始终可以使用slice

一些例子:

indx = slice(start, stop, step)
indy = slice(starty, stopy, stepy)
sliced = M[indx]
sliced2 = M[:,indy]
sliced3 = M[(indx, indy)]