通过矩阵[(a,b),c]而不是矩阵[a,b,c]访问矩阵元素

时间:2009-11-10 23:01:51

标签: python numpy

我想实现以下目标:

  1. 有一个AxBxC矩阵(其中A,B,C是 整数)。
  2. 访问该矩阵而不是矩阵[a, b,c]但作为矩阵[(a,b),c],这个 是的,我有两个变量,var1 =(x, y)和var2 = z并希望访问我的 矩阵作为矩阵[var1,var2]。
  3. 如何做到这一点?我正在使用numpy矩阵,如果它有任何区别。

    我知道我可以使用矩阵[var1 [0],var1 [1],var2],但如果可能的话,我想知道是否还有其他更优雅的方法。

    谢谢!

2 个答案:

答案 0 :(得分:3)

如果var1 = (x,y)var2 = z,您可以使用

matrix[var1][var2]

答案 1 :(得分:1)

我认为您可以简单地使用自己的新类继承NumPy矩阵类型;并重载__getitem__() nethod以接受元组。像这样:

class SpecialMatrix(np.matrix):
    def __getitem__(self, arg1, arg2, arg3=None):
        try:
            i, j = arg1
            k = arg2
            assert(arg3 is None)
            x = super(SpecialMatrix, self).__getitem__(i, j, k)
        except TypeError:
            assert(arg3 is not None)
            return super(SpecialMatrix, self).__getitem__(arg1, arg2, arg3)

使用__setitem__()做类似的事情。

我不确定__getitem__()是否接受多个参数,就像我在这里展示的那样,或者它是否需要一个元组,或者是什么。我写这个答案时没有NumPy,抱歉。

编辑:我重新编写了示例以使用super()而不是直接调用基类。自从我在Python中进行子类化以来,它已经有一段时间了。

编辑:我刚看了接受的答案。这完全是做到这一点的方式。我会留下这个以防万一有人发现它有教育意义,但简单的方法是最好的。