【问题标题】:In python, how do I create two index slicing for my own matrix class?在 python 中,如何为自己的矩阵类创建两个索引切片?
【发布时间】:2014-06-06 10:36:39
【问题描述】:

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

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

>>> A = Matrix(4,4,1)

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

>>>> A[1:2,1:2]

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

谢谢!

【问题讨论】:

    标签: python matrix slice magic-methods


    【解决方案1】:

    请注意,__getslice__ 自 2.0 版起已弃用。

    因此考虑以下最小示例:

    class Foo:
        def __getitem__(self, *args):
            print args
    f = Foo()
    f[1:2,2:4]
    

    这将打印:

    ((slice(1, 2, None), slice(2, 4, None)),)
    

    如果您查看data model docs,您会看到slice 对象是:

    ...用于在使用扩展切片语法时表示切片。 特殊只读属性:start 是下界; stop 是 上限; step 是步长值;如果省略,每个都是 None。这些 属性可以是任何类型。

    从这里应该很清楚如何实现您的 2 索引切片处理。

    【讨论】:

    • 我明白了。所以你传递一个切片对象的元组。酷,谢谢!现在,你知道如何通过 python-c API 传递切片对象的元组了吗?
    • 不抱歉,虽然我不明白为什么它与其他方法不同。这只是通过切片传递的标准参数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    相关资源
    最近更新 更多