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