在python中,如何为我自己的矩阵类创建两个索引切片?

kch*_*462 2 python matrix slice magic-methods

我试图在python中编写自己的矩阵类,仅用于测试目的.实际上,这个矩阵类是用c ++编写的,我使用SWIG来连接两者.但是,对于这个问题,考虑这个矩阵类的纯python实现可能更简单.

我希望能够调用此矩阵类并使用双索引切片.例如,在我们创建4x4矩阵之后,

>>> A = Matrix(4,4,1)
Run Code Online (Sandbox Code Playgroud)

我希望能够获得sub 2x2矩阵:

>>>> A[1:2,1:2]
Run Code Online (Sandbox Code Playgroud)

我听说过这种__getslice__方法,但这似乎只允许单一切片,例如A[1:2].那么如何才能执行双索引切片以便我可以调用A[i:j,l:k]

谢谢!

Ham*_*ish 5

请注意,__getslice__自2.0版以来不推荐使用.

请考虑以下最小示例:

class Foo:
    def __getitem__(self, *args):
        print args
f = Foo()
f[1:2,2:4]
Run Code Online (Sandbox Code Playgroud)

这将打印:

((slice(1, 2, None), slice(2, 4, None)),)
Run Code Online (Sandbox Code Playgroud)

如果您查看数据模型文档,您将看到slice对象是:

...用于在使用扩展切片语法时表示切片.特殊的只读属性:start是下限; stop是上限; step是步骤值; None如果省略则各自.这些属性可以是任何类型.

从这里开始,应该非常清楚如何实现2索引切片处理.