我对Python numpy很新。我试图在我的一个函数中使用numpy数组作为字典中的键,然后被Python解释器告知numpy数组不可清除。我刚刚发现解决这个问题的一种方法是使用repr()
函数将numpy数组转换为字符串,但它似乎非常昂贵。有没有更好的方法来达到同样的效果?
更新:我可以创建一个新类来包含numpy数组,这似乎是实现我想要的正确方法。只是想知道是否有更好的方法?
更新2:使用类来包含数组中的数据,然后覆盖__hash__
函数是可以接受的,但是,我更喜欢@hpaulj提供的解决方案。将array/list
转换为tuple
可以更好地满足我的需求,因为它不需要额外的课程。
答案 0 :(得分:7)
完成一些研究并阅读所有评论。我想我已经知道了自己问题的答案,所以我只是把它们写下来。
答案 1 :(得分:6)
如果要将numpy.ndarray
快速存储为字典中的键,快速选项是使用ndarray.tobytes(),它将返回一个不可变的原始python bytes
字符串
my_array = numpy.arange(4).reshape((2,2))
my_dict = {}
my_dict[my_array.tobytes()] = None
答案 2 :(得分:0)
我只是遇到了这个问题,有一个非常简单的使用列表理解的解决方案:
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]
我不知道这有多有效,但似乎是一个非常实用且直接的解决方案,不需要转换或新类:)