次のコードでValueErrorが発生する理由を説明できますか?numpy配列をヒープキューに追加する
import heapq
import numpy as np
a = np.ones((2, 2), dtype=int)
states = []
heapq.heappush(states, (0, a))
heapq.heappush(states, (0, a.copy()))
エラーメッセージは次のとおりです。
Traceback (most recent call last):
File "x.py", line 8, in <module>
heapq.heappush(states, (0, a.copy()))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
は、ヒープが正常に動作しますa.copy()
に追加することなく、それを実行すると、それに続く/秒1は、いくつかの理由で問題のためです。 [True, False, True]
の配列を持つ未知の真理値面があり、それでTrue
またはFalse
という単一のものを特定することはできませんが、なぜheapq
でそれを行う必要があるのですか?特に後者の場合のみ?
ヒープ要素を比較する必要があるheapq。ヒープ要素はタプルであり、タプルの最初のエントリは等しいので、2番目の要素を比較します。 2番目の要素を比較しても、ブール値として解釈できるものはありません。 – user2357112
'heapq.heappush(heap、(x、y))'は、 '' x''を優先してプッシュ 'y'を意味するわけではありません。それは "プッシュ事'(x、y) '"を意味します。別の優先事項と要素はありません。要素があります。 – user2357112