我想知道是否可以在"索引中使用元组解包从...到#34; 这种样式,所以使用inds = (a,b)
,{{1}会导致M[*inds]
。
我经常有元组,其中包含我用来将数据切割成一些有趣子集的索引,并且会认为像上面提到的那样方便。有没有办法做到这一点?
感谢输入
答案 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)]