python-2.7 - 以不同的方式获取和设置 np.array 元素
问题描述
我有一个 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
并使用我字典中的 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)
但它不允许我设置元素。我怎样才能让它工作?如果这是不可能的,那么允许以这两种不同方式获取和设置数组元素的最佳选择是什么?
解决方案
在 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
。谢谢你的支持。
推荐阅读
- ios - 使用未解析的标识符“Messaging”、“MessagingDelegate”、“MessagingRemoteMessage”
- excel - 为什么 LibreOffice base、Microsoft Excel 和 Tableau 需要不必要的权限才能从 bigquery 查询表数据?
- eclipse-rcptt - RCPTT:获取产品安装路径的 ECL 命令
- php - Laravel 如何为 where like 查询动态数组列名称?
- scala - 不推荐使用 ReactiveMongo 中的方法 find 。0.20.3
- pandas - 比较熊猫不同数据框中的两列
- reactjs - useEffect 模拟 componentWillUnmount 不返回更新状态
- c# - 如何解决“/”应用程序索引未初始化中的服务器错误?
- python - 无法将 Django 模型导入 Python shell
- javascript - 如何使用 express-validator 对嵌套对象进行验证