当前位置: 首页 > 面试题库 >

Python-在字典中使用numpy数组作为键的替代方法

湛功
2023-03-14
问题内容

我是Python
numpy的新手。我试图在我的一个函数中使用numpy数组作为字典中的键,然后Python解释器告诉我numpy数组不可哈希。我刚刚发现,解决此问题的一种方法是使用repr()函数将numpy数组转换为字符串,但这似乎非常昂贵。有没有更好的方法可以达到相同的效果?

更新:我可以创建一个新类来包含numpy数组,这似乎是实现我想要的正确方法。只想知道是否有更好的方法?

更新2:使用一个类来包含数组中的数据,然后重写__hash__函数是可以接受的,但是,我更喜欢@hpaulj提供的解决方案。将其转换array/listtuple适合我的需求的更好方法,因为它不需要其他类。


问题答案:

经过一些研究并阅读了所有评论。我想我已经知道自己问题的答案,所以我只把它们写下来。

  1. 写一个类包含的数据array,然后覆盖__hash__函数修改它是如何的方式 散列 由提到ZdaR
  2. 这个转换arraytuple,这使得该列表 可哈希 instantaneously.Thanks到hpaulj

我更喜欢No.2方法,因为它更适合我,而且更简单。但是,使用类可能会带来一些其他好处,因此它也很有用。



 类似资料:
  • 问题内容: Python不允许将字典用作其他字典中的键。有使用非嵌套字典作为键的解决方法吗? 问题答案: 如果您有一本真正不变的字典(尽管我不清楚为什么不只使用成对列表:eg ),那么您可以将其转换为: 成对的元组。您已经在问题中做到了。需要A而不是因为结果依赖于元素的顺序和不变性。 冻结集。从数学的角度来看,这是一种更合适的方法,因为它只需要不可变元素上的 等式关系,而第一种方法除等式外还需要排

  • 问题内容: 首先,如果在其他地方已回答我,我深表歉意。我所能找到的只是有关替换给定值的元素而不是多个值的元素的问题。 背景 我有数千个大型np.arrays,如下所示: 在这些数组中,我想根据字典替换值: 方法 目前,我正在使用一个简单的循环,并结合了花式索引: 问题 我的数组的尺寸是2000到2000年,字典有大约1000个条目,因此,这些循环要花很长时间。 题 是否有一个函数,该函数仅采用字典

  • 问题内容: 我有以下字典 我想获取字典列表中每个字典值“ KA20”和“ KA23”的键“ tmst”的总和。 您能对此提出建议吗? 问题答案: 您可以使用: 请注意,要正常工作,必须按分组键进行排序:

  • 问题内容: 我有以下列表,其中包含重复的具有不同值的汽车注册号。我想将其转换为字典,该字典接受汽车登记号的多个键。 到目前为止,当我尝试将列表转换为字典时,它消除了键之一。如何制作具有重复键的字典? 清单是: 我试过的代码是: 问题答案: Python字典不支持重复键。一种解决方法是将列表或集合存储在字典中。 一种简单的方法是使用: 你要做的就是更换 与 你将获得一个列表字典。

  • 问题内容: 我想知道我能否以某种方式使用x,y对作为字典的键 但是我得到了错误: 和错误: 那么..我们怎样才能使其符合标准? 问题答案: 的定义是,即密钥的类型必须符合协议。但是语言指南告诉我们协议可以被类,结构和枚举所采用,即不能被元组所采用。因此,元组不能用作键。 一种解决方法是定义一个包含两个Ints的可哈希结构类型(或您要放入元组的任何内容)。

  • 问题内容: 对于什么可以/不能用作python dict的键,我有些困惑。 因此,元组是不可变的类型,但是如果我在其中隐藏一个列表,那么它就不能成为键。.我不能像在模块内部一样轻松地隐藏一个列表吗? 我有一个模糊的想法,认为密钥必须是“可哈希的”,但是我只是承认自己对技术细节的无知。我不知道这里到底发生了什么。如果您尝试使用列表作为键,而将哈希作为其存储位置,那会出什么问题呢? 问题答案: Pyt