問題タブ [arpack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
5500 参照

matlab - Matlab 2013a で正規化されたカット

http://www.cis.upenn.edu/~jshi/software/Ncut_9.zip (Windows 7)の正規化されたカット パッケージを使用しています。

これは、Matlab2010a で問題なく動作していました。ただし、Matlab2013a (32 ビット学生版) にアップグレードしたところ、次のエラーが発生しました。

明らかに、new_eigs()関数ncutsは最新の Matlab の ARPACK バージョンと互換性がありません。

  • これに対する回避策を知っている人はいますか?
  • eigs()Normalized は、Matlab の関数の修正版を使用します。eigs()代わりにMatlabのビルトインを使用できないのはなぜですかeigs_new()(動作しているようです)。
0 投票する
2 に答える
2356 参照

r - R で疎行列の固有ベクトルを計算する

mR で大規模なスパース行列の最初の固有ベクトルを計算しようとしています。ここでeigen()は N > 10 6を意味するため、使用は現実的ではありません。

igraphこれまでのところ、スパース行列を処理できるパッケージの ARPACK を使用する必要があることがわかりました。ただし、非常に単純な (3x3) マトリックスで動作させることはできません。

次に、関数のヘルプの例にあるコードを使用してarpack()、2 つの最初の固有ベクトルを抽出します。

エラー メッセージが表示されます。

ここでは ncv (3) が nev (2) よりも大きく、N (3) に等しいため、このエラーがわかりません。

私は愚かな間違いを犯していますか、Rで疎行列の固有ベクトルを計算するより良い方法はありますか?


アップデート

arpack()このエラーは、大文字/小文字の NCV と NEV を使用する関数のバグによるものと思われます。

バグを解決するための提案 (パッケージ コードを確認しようとしましたが、複雑すぎて理解できません)、または別の方法で固有ベクトルを計算するための提案を歓迎します。

0 投票する
1 に答える
1784 参照

arpack - Windows 上の Arpack(++)

Arpack と Arpack++ を Windows 7 と Visual Studio 2010 で動作させ、swig を使用して C# で使用できるインターフェイスを作成しようとしています。これは基本的に、C# で固有ベクトル問題を解決するための今後のすべての試みを測定するためのベンチマークを作成することですが、まずこれが機能する必要があります。

g77 は MinGW に付属する Fortran コンパイラではなくなったため、わずかな変更はありますが、このガイドを使用して Arpack をコンパイルすることができました。代わりに gfortran を取得します。さらに変更を加えるとARmake.inc、オプションがコメントアウトされ-cg89、エラーが発生しました (これが g77 で埋められた理由はわかりませんが、gfortran はそれを受け入れません)。

さらにガイドに従って、「少なくとも、オプションの有無にかかわらず、現在コンパイルされている」と考えています。続けましたdllwrap。ただし、新しいバージョンの MinGW にはライブラリ ファイルが含まれていない-lg2cため、このオプションは受け入れられませんでした。libg2cこのオプションを指定せずに試してみると、一部のファイル.oおよび対応するファイルから未定義の参照に関するエラーが発生し.fます。どのライブラリ ファイルを使用すればよいですか? 私は明らかに間違ったことをしていますか?

0 投票する
0 に答える
2475 参照

python - python scipy sparse matrix SVD with error ARPACK error 3: 暗黙的に再開されたアーノルディ反復のサイクル中にシフトを適用できませんでした

scipy を使用して、大規模なデータに対して疎行列 svd を実行していました。行列は約 200,000*8,000,000 のサイズで、1.19% のゼロ以外のエントリがあります。私が使用していたマシンには160Gのメモリが搭載されているので、メモリは問題にならないと思います。

だからここに私が使用したいくつかのコードがあります:

エラーメッセージは次のようになります。

K=1000 (つまり #eigen values=1000) の場合、すべて問題ありません。K>=1250 を試すと、エラーが表示され始めます。さまざまな ncv 値も試しましたが、同じエラー メッセージが表示されます...

任意の提案と助けをいただければ幸いです。どうもありがとう :)

0 投票する
1 に答える
222 参照

c++ - アドレスが Fortran 関数呼び出しに正しく渡されない

extern "C" を使用して C++ で ARPACK 関数を宣言することにより、行列の固有ベクトルを見つけようとしています。

次に、コードの本文で関数を呼び出します。

ただし、コンパイルして実行すると、プログラムはセグメンテーション違反を起こします。GDB でバックトレースを実行すると、&INFO によって zneupd_ に渡されるアドレスが 0x0 であることがわかります。これにより、zneupd_ がこの位置に新しい値を割り当てようとすると、segfault が発生します。ただし、次のフレームに移動して print &INFO を使用すると、INFO がレジスタ 0x28a27c に格納されていると表示されます。何らかの理由で、私のプログラムは INFO の場所を zneupd_ に正しく渡しません。さらに困惑しているのは、znaupd_ が &INFO を適切に受信でき、その場所の値に問題なくアクセスして変更できることです。ある関数が引数を適切に受け取ることができるのに、他の関数ができない理由を誰か教えてもらえますか?

0 投票する
0 に答える
292 参照

c++ - 大規模な疎行列反転と ARPACK OP での使用

arpack++ (arpack の C++ ラッパー) は通常モードでは非常に遅く、シフト反転モードが正しく機能しないため、matlab eigs 関数を ARPACK の C++ ラッパーとして書き直そうとしています。しかし、私は立ち往生しており、キックが必要です。:)

マトラブ関数:

上記のコードのような出力を返す c++ のライブラリはありますか? そして、qq と dgAsB の意味をお聞きしたいと思います。L と U の意味は明確で pp も、大学で習ったのですが、その他の意味がわかりません。

アルパックOP

シフト反転モードの Arpack OP は (A - sigma*I )^-1*I*u と定義されます。まず、matlab コードが Arpack OP とどのように関連しているかを理解できません。そして、C++ で AminusSigmaBsolve の効率的なコードを記述できる C++ 用のライブラリが存在するかどうかを尋ねたいと思います。

C ++でMatlabと同じくらい効率的なプログラムを使用したいので、ご回答ありがとうございます。

0 投票する
2 に答える
1227 参照

python - Scipyスパースのeigs関数からの一貫性のない固有値

scipy.sparse.linalg モジュールの eigs 関数を使用していますが、一貫性のない結果が見つかりました。同じコードを 2 回実行すると、異なる結果が得られます。つまり、np.allclose の出力は False になります。その理由を説明できる人はいますか?

IPython の例はここで見ることができます(申し訳ありませんが、IPython の出力を投稿する方法がわかりません)。

編集1

@Kh40tiK で提案されているように、固有値をソートすることは問題ではありません。ここを参照してください。

編集2

さまざまなバージョンの Scipy を試し、@Kh40tiK によって投稿されたスクリプトを scipy.show_config() への追加呼び出しで実行した後、MKL でコンパイルされた SciPy バージョンに問題があるようです。

MKL の場合:

MKL なし:

0 投票する
0 に答える
1252 参照

sparse-matrix - ARPACK を使用したスパース行列の固有ベクトルと固有値の検索 (フォーム PYTHON、MATLAB、または FORTRAN サブルーチンとして呼び出されます)

数日前、大きな疎行列の固有値を見つける方法について質問しました。答えが得られなかったので、考えられる解決策を説明することにしました。

最初に、FOTRAN ドライバー プログラムを使用して ARPACK のサブルーチンを直接呼び出す必要はまったくないと言いたいと思います。それは非常に難しく、私はそれを実行したことがありません。しかし、次のことができます。

#

オプション 1: パイソン

#

numpy と scipy をインストールして、次のコードを実行できます。

ARPACK の非常に「よく書かれた」マニュアルを読む喜びを私たちに与えてくれるので、これは特に素晴らしいことです。

これには問題があります。非対称マトリックスでは機能しないと思います。少なくとも、結果を matlab と比較してもあまり説得力がありませんでした。

#

オプション 2: MATLAB

#

matlab を使用する方がはるかに簡単で、非対称行列で機能すると思います。さて、私は500000x500000のスパース行列を持っているので、これがmatlabで機能するかどうか....お茶の別のカップです! Python を使用すると、このサイズの行列を読み込んで、あまり問題なく固有値を計算できたことに注意する必要があります。

乾杯、

0 投票する
1 に答える
1122 参照

c++ - Arpack++ スパース固有値ソルバーは、同等の Matlab eigs() より何倍も遅い

C++ プログラムで、非常に大きな疎対称行列の n 個の最小固有値ベクトルを計算する必要があります。私の例では、n=30 とします。行列は 10k x 10k で、約 70k のゼロ以外の値があります。

いくつかのライブラリで多くの調査と実験を行った結果、おそらく ARPACK++ が最善の策であることがわかりました。このページの手順に従ってインストールしました。

計算は次のスニペットで行われます。

正しい結果が得られますが、約 8.5 秒かかりますが、Matlab では、呼び出すだけで約 0.5 秒で同じ結果を得ることができます

トピックに関する私の調査から、Matlabeigs()は同じ計算のために ARPACK fortran ライブラリも呼び出すため、なぜ C++ ラッパーが非常に遅いのかわかりません。

また、ARPACK++ は、double の代わりに float を使用しようとすると、プログラムが単に停止し、削除するまで何もしない、または 0 や 0.0001 などの値の周りの固有ベクトルを計算しようとする場合など、多くの状況で非常に奇妙に動作します。 'SM' と同等である場合、単にゴミを吐き出してクラッシュします。

したがって、私の疑問は、ARPACK++ が本当に遅いのか、それともこれらすべてが不適切な構成/インストールの症状なのか、もしそうなら、それを解決するために何ができるのかということです。ご協力いただきありがとうございます。