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

zhte4eai  于 2023-08-05  发布在  Python
关注(0)|答案(3)|浏览(122)

我对Python numpy很陌生。我试图在我的一个函数中使用numpy数组作为字典中的键,然后被Python解释器告知numpy数组是不可散列的。我刚刚发现解决这个问题的一种方法是使用repr()函数将numpy数组转换为字符串,但它似乎非常昂贵。有没有更好的方法来达到同样的效果?
更新:我可以创建一个新的类来包含numpy数组,这似乎是实现我想要的正确方法。只是想知道是否有更好的方法。
更新2:使用一个类来包含数组中的数据,然后覆盖__hash__函数是可以接受的,但是,我更喜欢@hpaulj提供的解决方案。将array/list转换为tuple更适合我的需要,因为它不需要额外的类。

9bfwbjaz

9bfwbjaz1#

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

my_array = numpy.arange(4).reshape((2,2))
my_dict = {}
my_dict[my_array.tobytes()] = None

字符串

uqjltbpv

uqjltbpv2#

在做了一些研究和阅读所有的评论。我想我已经知道我自己问题的答案了所以我把它们写下来。
1.编写一个类来包含array中的数据,然后重写__hash__函数来修改ZdaR中提到的散列的方式
1.将这个array转换为tuple,这使得列表立即成为可散列的
我更喜欢第二种方法,因为它更适合我的需要,也更简单。但是,使用类可能会带来一些额外的好处,因此它也可能是有用的。

aurhwmvo

aurhwmvo3#

我刚刚遇到了这个问题,有一个非常简单的解决方案,使用列表解析:

import numpy as np

dict = {'key1':1, 'key2':2}
my_array = np.array(['key1', 'key2'])

result = np.array( [dict[element] for element in my_array] )
print(result)

字符串
结果应为:

[1 2]


我不知道这有多有效,但似乎是一个非常实用和直接的解决方案,不需要转换或新类:)

相关问题