Доступ к элементу матрицы по матрице [(a, b), c] вместо матрицы [a, b, c] - PullRequest
0 голосов
/ 11 ноября 2009

Я хочу добиться следующего:

  1. иметь матрицу AxBxC (где A, B, C целые числа).
  2. Доступ к этой матрице не как к матрице [a, b, c] но в качестве матрицы [(a, b), c] это есть у меня две переменные, var1 = (x, у) и var2 = z и хочу получить доступ к моему матрица как матрица [var1, var2].

Как это можно сделать? Я использую матрицу NumPy, если это имеет какое-либо значение.

Я знаю, что мог бы использовать матрицу [var1 [0], var1 [1], var2], но, если возможно, я хотел бы знать, есть ли какой-нибудь другой более элегантный способ.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 11 ноября 2009

Если var1 = (x,y) и var2 = z, вы можете использовать

matrix[var1][var2]
1 голос
/ 11 ноября 2009

Я думаю, вы можете просто создать подкласс типа матрицы NumPy с помощью нового собственного класса; и перегрузить nethod __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.

РЕДАКТИРОВАТЬ: Я только что посмотрел на принятый ответ. Это полностью способ сделать это. Я оставлю это на всякий случай, если кто-то сочтет это познавательным, но самый простой способ - лучший.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...