У меня есть 2D np.array.
array = np.array([[1, 2], [3, 4]])
У меня есть словарь.
element_ids = {1: (0, 1), 2: (1, 0), 3: (0, 0), 4: (1, 1)}
Я хочу написать класс, который позволил бы мне получать и устанавливать элементы массива как обычным способом
>> my_array = MyArray(array, element_ids)
>> my_array[0, 1]
1
>> my_array[0, 1] = 5
>> my_array[0, 1]
5
и используя идентификаторы из моего словаря
>> my_array[1, 0]
3
>> my_array.by_id(2)
3
>> my_array.by_id(2) = 7
>> my_array.by_id(2)
7
>> my_array[1, 0]
7
, в этом случае я хочу my_array.by_id(i)
вести себя так, как будто я написал my_array[element_ids[i]]
. Как я могу это сделать?
Я написал класс, который позволял бы получать элементы обоими способами
import numpy as np
class MyArray:
def __init__(self, array, element_ids):
self.array = array
self.element_ids = element_ids
def by_id(self, element_id):
indices = self.element_ids[element_id]
return self[indices]
def __getitem__(self, key):
i, j = key
return self.array[i, j]
array = np.array([[1, 2], [3, 4]])
element_ids = {1: (0, 1), 2: (1, 0), 3: (0, 0), 4: (1, 1)}
my_array = MyArray(array, element_ids)
, но он не позволял бы мне устанавливать элементы. Как я могу заставить это работать? Если это невозможно, каковы наилучшие альтернативы, которые позволили бы получать и устанавливать элементы массива этими двумя различными способами?