簡體   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