タグ付けされた質問 「numpy」

5
numpyでインプレースで行列を置換
pythonのnumpyライブラリを使用して、行と列のいくつかの順序を変更することにより、密な正方形の遷移行列をインプレースで変更したい。数学的には、これは、行列に置換行列Pを事前乗算し、P ^ -1 = P ^ Tを事後乗算することに相当しますが、これは計算上合理的な解決策ではありません。 今私は手動で行と列を交換していますが、numpyには素敵な関数f(M、v)があり、Mにはn行と列があり、vにはnエントリがあるので、f(M、v)は更新されますMインデックス順列v。多分、インターネットの検索に失敗しているだけかもしれません。 このようなことは、numpyの「高度なインデックス作成」によって可能になるかもしれませんが、私の理解では、そのようなソリューションは適切ではありません。また、いくつかの単純な状況では、インデックス置換を個別に追跡するだけで十分かもしれませんが、これは私の場合は便利ではありません。 追加: 時々、人々が順列について話すとき、それらはランダムな順列のサンプリングを意味するだけです。例えば、統計のp値を取得する手順の一部として。または、可能なすべての順列をカウントまたは列挙することを意味します。私はこれらのことについて話していません。 追加: マトリックスはデスクトップRAMに収まるほど小さいが、思いがけずコピーしたくないほど大きい。実際には可能な限り大きなマトリックスを使用したいと思いますが、RAMに保持できないという不便さに対処したくありません。また、マトリックスに対してO(N ^ 3)LAPACK操作を行います。実用的なマトリックスサイズを制限します。私は現在、この大きな行列を不必要にコピーしていますが、これを置換のために簡単に回避できることを望みます。

1
Python / Numpy配列操作のパフォーマンスは、配列の次元の増加に伴ってどのようにスケーリングしますか?
Python / Numpy配列は配列の次元の増加に伴ってどのようにスケーリングしますか? これは、この質問に対するPythonコードのベンチマークテスト中に気づいたいくつかの動作に基づいています:numpyスライスを使用してこの複雑な式を表現する方法 この問題のほとんどは、配列を作成するためのインデックス付けに関係していました。Pythonループ上で(あまり良くない)CythonとNumpyバージョンを使用する利点は、関係する配列のサイズによって異なることがわかりました。NumpyとCythonの両方は、ある時点まで(Cythonの場合は、Numpyの場合はN = 2000程度)のパフォーマンス上の利点が増加し、その後利点は低下しました(Cython機能は最速のままでした)。N= 500N=500N=500N= 2000N=2000N=2000 このハードウェアは定義されていますか?大規模な配列で作業するという点で、パフォーマンスが高く評価されているコードについて従うべきベストプラクティスは何ですか? この質問(なぜMatrix-Vector Multiplication Scalingではないのですか?)は関連している可能性がありますが、Pythonで配列を処理するさまざまな方法が相互にどのようにスケーリングするかについてもっと知りたいと思っています。

1
SciPy eigsh()が高調波発振器の場合に誤った固有値を生成するのはなぜですか?
私は、計算物理学の文脈で、巨大なスパース行列の固有値計算を実行するために、いくつかのより大きなコードを開発しています。固有値は分析的によく知られているため、1次元の単純な調和振動子に対してルーチンをテストします。そのようにして、自分のルーチンをSciPyの組み込みソルバーと比較すると、下のプロットに表示される奇妙なことに出くわしました。ここでは、数値計算された最初の100個の固有値および分析固有値を見ることができますλN U Mλnあなたはm\lambda_{num}λn個のAλana\lambda_{ana} 固有値番号40付近で、数値結果は分析結果から分岐し始めます。これは私を驚かせるものではありません(議論で取り上げられない限り、ここではなぜなのかを説明しません)。しかし、私にとって驚くべきことは、eigsh()が縮退した固有値(固有値80あたり)を生成することです。なぜeigsh()は、そのような少数の固有値に対してもそのように振る舞いますか? import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = 10. accuracy = 1e-5 #stepsize h = (xmax - xmin) / (N + 1.) #exclude first and last points since …

3
numpyスライスを使用してこの複雑な式を表現する方法
Pythonで次の式を実装したい: ここでとはサイズ、 numpy配列サイズ numpy配列です。サイズは最大で約10000で、関数は何度も評価される内部ループの一部であるため、速度が重要です。バツ私= ∑j = 1i − 1ki − j 、jai − jaj、バツ私=∑j=1私−1k私−j、ja私−jaj、 x_i = \sum_{j=1}^{i-1}k_{i-j,j}a_{i-j}a_j, バツバツxyyynnnkkkn × nn×nn\times nnnn 理想的には、forループを完全に回避したいのですが、もしそれがあれば世界の終わりではないと思います。問題は、ネストされたループをいくつか持たずにそれを行う方法を理解するのに問題があることです。 誰もが効率的で、できれば読みやすい方法でnumpyを使用して上記の式を表現する方法を見ることができますか?より一般的には、この種のものにアプローチする最良の方法は何ですか?
14 python  numpy 

1
有限差分の近似ヤコビアンは、ニュートン法の不安定性を引き起こすことができますか?
私はpython 3に後方オイラーソルバーを実装しました(numpyを使用)。私自身の便宜と演習として、勾配の有限差分近似を計算する小さな関数を作成しました。これにより、ヤコビアンを常に分析的に決定する必要はありません(可能な場合でも!)。 Ascher and Petzold 1998で提供された説明を使用して、特定のポイントxで勾配を決定するこの関数を作成しました。 def jacobian(f,x,d=4): '''computes the gradient (Jacobian) at a point for a multivariate function. f: function for which the gradient is to be computed x: position vector of the point for which the gradient is to be computed d: parameter to determine perturbation value eps, …

2
numpyの行列反転の複雑さ
密な正方行列を反転する必要がある微分方程式を解いています。この行列の反転は計算時間のほとんどを消費するため、利用可能な最速のアルゴリズムを使用しているかどうか疑問に思っていました。 私の現在の選択はnumpy.linalg.invです。数値から、でスケーリングされることがわかります。ここで、nは行数であるため、方法はガウス消去法のようです。O(n3)O(n3)O(n^3) ウィキペディアによると、利用可能なより高速なアルゴリズムがあります。これらを実装するライブラリがあるかどうか誰もが知っていますか? なぜこれらの高速アルゴリズムをnumpyが使用しないのでしょうか?

4
部分特異値分解(SVD)のメモリー効率の高い実装
モデルの縮小のために、行列の最大20の特異値に関連付けられた左特異ベクトルを計算したい A ∈ RN、kあ∈RN、kA \in \mathbb R^{N,k}、 どこ N≈ 106N≈106N\approx 10^6 そして K ≈ 103k≈103k\approx 10^3。残念ながら、私のマトリックスああA どんな構造もなしで密になります。 このサイズのランダムマトリックスに対してPython svdのnumpy.linalgモジュールからルーチンを呼び出すだけの場合、メモリエラーが発生します。これは、V∈ RN、NV∈RN、NV\in \mathbb R^{N,N} 分解のために A = VSUあ=VSUA = VSU。 この落とし穴を回避するアルゴリズムが周りにありますか?たとえば、非ゼロの特異値に関連付けられた特異ベクトルのみを設定します。 計算時間と精度をトレードする準備ができています。

1
超伝導体の曲線をモデリングするための数値積分(Python)
私は、超伝導体-超伝導体接合の電流-電圧特性をモデル化しようとしている物理学者です。 このモデルの方程式は次のとおりです。 私(V)= 1e Rn − n∫∞- ∞| E|[ E2- Δ21]1 / 2| E+ e V|[ (E+ e V)2- Δ22]1 / 2[ f(E)− f(E+ e V)]d EI(V)=1eRn−n∫−∞∞|E|[E2−Δ12]1/2|E+eV|[(E+eV)2−Δ22]1/2[f(E)−f(E+eV)]dE\begin{align} I(V) = \frac{1}{eR_{\mathrm{n-n}}}\int_{-\infty}^{\infty}\frac{|E|}{[E^{2} - \Delta_{1}^{2}]^{1/2}}\frac{|E + eV|}{[(E + eV)^{2} - \Delta_{2}^{2}]^{1/2}}[f(E) - f(E + eV)]\,\mathrm{d}E \end{align} 現在の(またはコード内の)値は、この積分を特定の電圧(Vまたはコード内)について評価することによって計算されます。私私IIVVVv 私はこれをPythonで試みました。コードを以下に示します。 from scipy import integrate from …

2
パラメトリック行列の固有ベクトルの連続性
私は次元の行列H(→ K)ベクターパラメータに応じ→ Kを。んnnH^(k⃗ )H^(k→)\mathrm{\hat{H}}(\vec{k})k⃗ k→\vec{k} ここで、固有値ルーチンは固有値を特定の順序で返しません(通常は並べ替えられます)が、固有値を→ kの滑らかな関数としてトレースしたいと思います。固有値は特定の順序で返されていないので、ちょうどトレースE Iを、いくつかの特定のインデックスのためのI ∈ { 1 、。。、n }は、以下の図に示すように、滑らかではない線のセットを返しますEiEiE_ik⃗ k→\vec{k}EiEiE_ii∈{1,..,n}i∈{1,..,n}i\in\{1,..,n\} k⃗ k→\vec{k}k⃗ +dk⃗ k→+dk→\vec{k}+d\vec{k}vi(k⃗ )⋅vj(k⃗ +dk⃗ )∼δpipjvi(k→)⋅vj(k→+dk→)∼δpipjv_i(\vec{k})\cdot v_j(\vec{k}+d\vec{k})\sim \delta_{p_i p_j}pi,pj∈π({1,...,n})pi,pj∈π({1,...,n})p_i, p_j\in \pi(\{1,...,n\})ππ\pi つまり、固有ベクトルの連続性を追跡します。 ただし、数値ルーチンではいくつかの問題が発生します。私が使用する点の特定の小さなサブセットでは、近くの点にあるいくつかの固有ベクトルがほとんど正規直交ではありません。私の最初の疑いは、それらの固有ベクトルが縮退した固有値に対応していることでしたが、常にそうであるとは限りません。 dk⃗ dk→d\vec{k} そのようなことが起こるのを許されていますか?または、数値ルーチンが連続固有ベクトルを返すことを保証することは可能ですか?私が使用するルーチンはnumpy.linalg.eighで、これはLAPACKのzheevdのインターフェースです。 (あなたの中の物理学者は私がバンド構造について話していることを認識するでしょう)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.