我有一个二维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
并使用字典中的ID
>> 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)
但是它不允许我设置元素。我该如何运作?如果这是不可能的,那么允许以这两种不同方式获取和设置数组元素的最佳替代方法是什么?
答案 0 :(得分:1)
在Paul Panzer的帮助下,我设法找到了解决方案。
import numpy as np
class MyArray:
def __init__(self, array, element_ids):
self.array = array
self.by_id = ById(self, element_ids)
def __getitem__(self, key):
i, j = key
return self.array[i, j]
def __setitem__(self, key, item):
i, j = key
self.array[i, j] = item
class ById:
def __init__(self, my_array, element_ids):
self.my_array = my_array
self.element_ids = element_ids
def __getitem__(self, key):
return self.my_array[self.element_ids[key]]
def __setitem__(self, key, item):
self.my_array[self.element_ids[key]] = item
这可以按预期工作,除了括号by_id
以外的括号。感谢您的支持。