繁体   English   中英

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

[英]Python - Alternative for using numpy array as key in dictionary

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

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

更新2:使用一个类在数组中包含数据,然后重写__hash__函数是可以接受的,但是,我希望使用@hpaulj提供的解决方案。 array/list转换为tuple可以更好地满足我的需求,因为它不需要其他类。

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

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

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

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

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

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

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]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM