以下代碼出現錯誤,無法查看源代碼,也無法除錯進去。
我想知道
- PriorityQueue(或 heapq)在內部作業的真正原因;
- 如何解決這個現象。
import numpy as np
from queue import PriorityQueue
q = PriorityQueue()
q.put((0, np.array([True, True])))
q.put((0, np.array([True, False])))
"""
Traceback (most recent call last):
File "D:/code-study/py/A/B.py", line 6, in <module>
q.put((0, np.array([True, False])))
File "D:\ProgramData\Anaconda3\lib\queue.py", line 149, in put
self._put(item)
File "D:\ProgramData\Anaconda3\lib\queue.py", line 233, in _put
heappush(self.queue, item)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
"""
uj5u.com熱心網友回復:
問題是比較兩個 numpy 陣列不會回傳 True 或 False。優先級佇列的作業原理是使用 < 逐字比較兩個元素,并期望回傳 True 或 False。
將您的資料放在優先級佇列(priority, actual_data)中是慣例,但這只是慣例。實際比較是在完整元素之間進行的。當 Python 比較兩個元組并且元組中的第一項相等時,它會比較每個元組的第二個元素。這就是給你一個錯誤的原因。
一個標準的技巧是保留一個計數器,并在每次向佇列添加元素時將其加一。所以你的價值觀是(priority, counter, actual_data). 由于佇列中的每個元素都有不同的第二個值,因此永遠不會比較實際資料。具有相同優先級的專案將按 FIFO 順序處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359766.html
下一篇:在字典元組鍵值上拆分資料框/字典
