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

问题描述 投票:9回答:2

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

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

更新2:使用类来包含数组中的数据,然后覆盖__hash__函数是可以接受的,但是,我更喜欢@hpaulj提供的解决方案。将array/list转换为tuple以更好的方式满足我的需要,因为它不需要额外的类。

python arrays numpy dictionary
2个回答
7
投票

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

  1. 写一个类来包含array中的数据,然后重写__hash__函数来修改ZdaR所提到的散列方式
  2. 将此array转换为tuple,这使得该列表可以瞬间清洗。感谢hpaulj

我更喜欢方法2,因为它更符合我的需要,也更简单。但是,使用类可能会带来一些额外的好处,因此它也可能有用。


6
投票

如果你想快速存储numpy.ndarray作为字典中的键,一个快速选项是使用ndarray.tobytes(),它将返回一个原始的python bytes字符串,它是不可变的

my_array = numpy.arange(4).reshape((2,2))
my_dict = {}
my_dict[my_array.tobytes()] = None
© www.soinside.com 2019 - 2024. All rights reserved.