2016-09-24 29 views
5

我對Python numpy很新穎。我試圖在我的一個函數中使用numpy數組作爲字典中的鍵,然後由Python解釋器告知numpy數組不可散列。我剛剛發現,解決這個問題的一種方法是使用repr()函數將numpy數組轉換爲字符串,但它看起來非常昂貴。有沒有更好的方法來達到同樣的效果?Python - 在字典中使用numpy數組作爲鍵的替代方法

更新:我可以創建一個新的類來包含numpy數組,這似乎是正確的方式來實現我想要的。只是想知道有沒有更好的方法?

更新2:使用一個類來包含數組中的數據,然後重寫__hash__函數是可以接受的,但是,我更喜歡@hpaulj提供的解決方案。將array/list轉換爲tuple可以更好地滿足我的需求,因爲它不需要額外的課程。

+0

你在做什麼那你想使用一個numpy數組(以任何形式)作爲一個字典鍵? –

+0

您可以使用numpy數組中的數據來創建一個「哈希」,它可以用作字典的關鍵字。 – ZdaR

+0

@JonClements我需要一本詞典來映射一個一維向量到一組點。 – Jiayi

回答

6

經過一番研究和閱讀所有評論。我想我已經知道了我自己的問題的答案,所以我只是寫下來。

  1. 寫一個類包含在array的數據,然後覆蓋__hash__功能來修改它是如何散列ZdaR
  2. 轉換提到這個arraytuple,這使得列表的方式哈希的 instantaneously.Thanks到hpaulj

我寧願方法二,因爲它符合我的需要更好的,以及簡單。但是,使用類可能會帶來一些額外的好處,所以它也可能有用。

0

如果你想快速一numpy.ndarray存儲在一個字典中的鍵,快速選擇是使用ndarray.tobytes()將返回原始的python bytes的字符串,是不可改變的

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