扩展的索引语法在python的doc。
中提到slice([start], stop[, step])
使用扩展索引语法时也会生成切片对象。例如:a[start:stop:step]
或a[start:stop, i]
。有关返回迭代器的备用版本,请参阅itertools.islice()
。
a[start:stop:step]
按照描述工作。但是第二个呢?它是如何使用的?
答案 0 :(得分:12)
a[start:stop,i]
调用方法a.__getitem__((slice(start,stop,None), i))
。
如果TypeError
是一个列表,则会引发a
,但如果a
是一个numpy数组,则它是有效且有用的表示法。事实上,我相信Numpy的开发人员要求Python的开发人员精确地扩展有效的Python切片表示法,以便更容易实现numpy数组切片表示法。
例如,
import numpy as np
arr=np.arange(12).reshape(4,3)
print(arr)
# [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
1:3
选择第1行和第2行,2
选择第3列:
print(arr[1:3,2])
# [5 8]
PS。要试验将哪些切片发送到__getitem__
,您可以
玩这个玩具代码:
class Foo(list):
def __getitem__(self,key):
return repr(key)
foo=Foo(range(10))
print(foo[1:5,1,2])
# (slice(1, 5, None), 1, 2)
答案 1 :(得分:4)
符号[:,:]
用于切片multidimensional arrays。 Python默认没有任何多维数组,但语法支持它,numpy例如利用这种语法。