我对Python numpy很陌生。我试图在我的一个函数中使用numpy数组作为字典中的键,然后被Python解释器告知numpy数组是不可散列的。我刚刚发现解决这个问题的一种方法是使用repr()
函数将numpy数组转换为字符串,但它似乎非常昂贵。有没有更好的方法来达到同样的效果?
更新:我可以创建一个新的类来包含numpy数组,这似乎是实现我想要的正确方法。只是想知道是否有更好的方法。
更新2:使用一个类来包含数组中的数据,然后覆盖__hash__
函数是可以接受的,但是,我更喜欢@hpaulj提供的解决方案。将array/list
转换为tuple
更适合我的需要,因为它不需要额外的类。
3条答案
按热度按时间9bfwbjaz1#
如果你想快速地将一个
numpy.ndarray
作为一个键存储在字典中,一个快速的选择是使用ndarray.tobytes(),它将返回一个不可变的原始pythonbytes
字符串。字符串
uqjltbpv2#
在做了一些研究和阅读所有的评论。我想我已经知道我自己问题的答案了所以我把它们写下来。
1.编写一个类来包含
array
中的数据,然后重写__hash__
函数来修改ZdaR中提到的散列的方式1.将这个
array
转换为tuple
,这使得列表立即成为可散列的。我更喜欢第二种方法,因为它更适合我的需要,也更简单。但是,使用类可能会带来一些额外的好处,因此它也可能是有用的。
aurhwmvo3#
我刚刚遇到了这个问题,有一个非常简单的解决方案,使用列表解析:
字符串
结果应为:
型
我不知道这有多有效,但似乎是一个非常实用和直接的解决方案,不需要转换或新类:)