2009-11-10 56 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中進行子類化以來,已經有一段時間了。

編輯:我只是看着接受的答案。這完全是做到這一點的方法。如果有人發現它有教育意義,我會留下來,但最簡單的方法是最好的。

相關問題