python的文档中提到了扩展索引语法。
slice([start], stop[, step])当使用扩展索引语法时,也会生成切片对象。例如:a[start:stop:step]或a[start:stop, i]。有关返回迭代器的备用版本,请参见itertools.islice()。
a[start:stop:step]的工作原理如上所述。但是第二个呢?它是如何使用的?
发布于 2010-05-04 04:47:56
a[start:stop,i]调用方法a.__getitem__((slice(start,stop,None), i))。
如果a是一个列表,这将引发一个TypeError,但是如果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选择第三列:
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)发布于 2010-05-04 04:34:33
符号[:,:]用于对multidimensional arrays进行切片。默认情况下,Python没有任何多维数组,但是语法支持它,例如numpy就利用了这种语法。
https://stackoverflow.com/questions/2761003
复制相似问题