2016-04-07 1 views
0

は、私は、固有値の大きさの降順で固有値・固有ベクトルのペアをソートする必要がある、と時々I(〜時間の1月3日)次のエラーを取得します - その背後にある数学Python:list.sort()を呼び出すときにあいまいさについてValueErrorを取得しますか?</p> <pre><code>ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() </code></pre> <p>ビット:.sort()関数を呼び出すときに

eigenPairs = [] # list of tuples of (eigenVal, eigenVect) 
for i in range(len(eigenVals)): 
    eigenPairs.append((eigenVals[i], eigenVects[:, i])) 

eigenPairs.sort() 
eigenPairs.reverse() 

eigenValsとeigenVects変数は、基本的には、カスタム方法で実装マトリックス上のSVDの結果である:eigenPairs.sort()呼び出しで、エラーがこれをある生成するコードの部分はチェックアウトする。奇妙な部分は、コードが動作するときに動作し、期待される結果を得ることです。

+0

'eigenVects [:, i]'はエラーを発生させませんか?例えば。 'TypeError:リストインデックスはタプルではなく整数でなければならないのですか? '値を0からiにする場合は、範囲内のiに対して 'eigenVects [:i]' – jDo

+0

thisを使用します(len(eigenVals)): 'は非常に不快に見えます。 https://docs.python.org/2/library/functions.html#enumerate –

+0

列挙型を見てください。「eigenVals」と「EigenVects」が失敗したときの様子を教えてください。 –

答えて

0

ValueErrorについて多くの質問があります。結果は、numpyブール値配列を使用して、スカラーブール値を期待するPythonコンテキストになります。最も一般的にはif x:..です。ここでは、配列を含むリストのソートを実行した結果と思われます。

リストまたはタプルのリストに変更するか、機能している比較関数またはキーを定義するか、配列の並べ替えに切り替えます。

たとえば、スカラーのタプルの最初の要素だけをソートしようとします。

第2要素の固有ベクトルのサイズはどのくらいですか?それが失敗したときにv。を実行したときの違い。

私はあなたが配列の固有値を累積し、それをソートできると確信しています。またはargsortです。


sorted(L, key=operator.itemgetter(0)) 

Iは2スロットでNoneを含まない組で実験タプル

https://wiki.python.org/moin/HowTo/Sorting/#Key_Functions

https://wiki.python.org/moin/HowTo/Sorting/#Operator_Module_Functions

の最初の項目に並べ替えを制限します。ソートは、第1期の順序が明確であった場合は無視されましたが、第2期を使用して関係を解決した場合はエラーを生成しました。

固有値がユニークであったにもかかわらず、重複があり、配列を順序付けしようとしたときに、あなたの並べ替えがうまくいったと思います。

+0

固有ベクトルはすべて長さが1800であり、デフォルトではタプルの最初の要素によってリストがソートされていると思いましたか? – user2605299

+0

'itemgetter'を使用するリストのソートリストでSO答えを見つけました。 – hpaulj

関連する問題