2009-11-10 58 views
0

欲实现如下:由矩阵[(A,B),C]而不是矩阵访问一个矩阵元素[A,B,C]

  1. 有一个AxBxC矩阵(其中,A,B ,C是 整数)。
  2. 访问矩阵不是作为基质并[a, B,C],但如矩阵[(A,B),C],这 是,我有两个变量var1 =(X, y)和VAR2 = z并且想要以矩阵[var1,var2]的形式访问我的 矩阵。

这怎么办?我使用numpy矩阵,如果它有任何区别。

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

谢谢!

+1

matrix [a,b] [c]? –

+0

补充说asnwer,我会评分它。谢谢! –

回答

3

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

matrix[var1][var2] 
1

我想你可以简单地继承了NumPy的矩阵型,具有一类新的自己的;并且过载__getitem__()方法来接受元组。像这样的:

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中进行子类化以来,已经有一段时间了。

编辑:我只是看着接受的答案。这完全是做到这一点的方法。如果有人发现它有教育意义,我会留下来,但最简单的方法是最好的。

相关问题