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

コード構文の容易さと読みやすさを強調する汎用の高水準プログラミング言語。

6
PythonとFORTRAN
どちらが良いですか:FORTRANまたはPython?そして、どちらの場合もGnuplotが必要だと思います。 現在、Windowsマシンで作業しています。 モンテカルロシミュレーション、数値積分と微分、分子動力学などを含む物理問題の数値解を得るために使用したいと思います。 FORTRAN(私が信じる77)とPythonの両方を紹介する計算物理学のコースを見ました。私は一方から始めて、もう一方を学ぶことを計画していますが、どの遷移が最も簡単かはわかりません。 また、どのコンパイラをお勧めしますか? 私にとっての基本的な質問は、学習するのが最も簡単なもの、最も速いもの、最も使いやすいもの、そして何よりも最も使用されているものです(これら4つの比較)。そして、その次に使用されている最も一般的な(無料または有料)コンパイラは何ですか?現在、古いラップトップ(初期のIntelデュアルコア)をLinuxに変換することを検討しています。うまくいけば、それは十分に高速です。 これまでの回答に感謝します!私が探しているものと一致する答えはLKlevinとSAADのものです。 私はC ++、Mapleの基本を知っており、MATLABとMathematica9をマスターすれば、それが助けになります。
17 python  fortran 

1
Newton-Krylovが適切なソルバーではないのはいつですか?
最近、私はscipyのさまざまな非線形ソルバーを比較しており、Scipy CookbookのNewton-Krylovの例に特に感銘を受けました。約20行のコードで非線形反応項を持つ2階微分方程式方程式を解きます。 半導体ヘテロ構造の非線形ポアソン方程式(ポアソン-ボルツマン方程式とも呼ばれ、これらのノートの17ページを参照)を解くためにサンプルコードを修正しました。 d2ϕdバツ2− k (x )( p (x 、ϕ )− n (x 、ϕ )+ N+(x )) = 0d2ϕdバツ2−k(バツ)(p(バツ、ϕ)−n(バツ、ϕ)+N+(バツ))=0 \frac{d^2\phi}{dx^2} - k(x) \left(p(x,\phi) - n(x,\phi) + N^{+}(x)\right) = 0 (これはソルバーに渡される残差関数です。) これは、静電気の問題である及びP (X 、φは)フォームの非線形関数であり、N I(X )E - (E I(X 、φ )- E 、F)。ここでの詳細は重要ではありませんが、ポイントは非線形関数がϕで指数関数的に変化するため、残差関数は巨大な範囲(10 − 6 − 10 16)にわたって変化する可能性があることです。n (x 、ϕ )n(バツ、ϕ)n(x,\phi)p …

3

3
Matlab Neural Network ToolboxのPython OSSの代替。相互比較はありますか?
私は科学研究のために商用ソフトウェアから独立したいと思います。将来的にMatlabにアクセスできるかどうかわからないし、言語が気に入らないので、Matlabやそのツールボックスなどの商用パッケージへの依存が不十分であることがわかりました。したがって、私は代替手段を探しています。 幸いなことに、私はPythonに非常に堪能であり(そしてこの言語が大好きです)、NumPy、SciPy、Matplotlib、Basemap、およびNetCDFの読み取りおよび書き込みルーチンで、ほとんどのニーズを満たします。ほとんど—フィードフォワード多層パーセプトロンを使用して衛星検索をトレーニングする必要がある場合、Matlabに戻ります。たとえば、人工ニューラルネットワークを使用します。 オープンソースソフトウェアでは珍しくありませんが、ニューラルネットワークを実行するパッケージは複数あります。かなり複数: しばらく前に、「ニューラルネットワーキング用のスイスアーミーナイフ」であるPyBrainを試しましたが、短期間(開発時と実行時の両方)で満足のいく結果を得ることができませんでした。おそらく、私は十分に一生懸命に努力しなかったか、おそらくそれは私の正確な必要性に本当に向いていません。 たった今、私は有望に見えるニューロラボと呼ばれるパッケージがあることを発見しました。これは、MATLABのNeural Network Toolbox(NNT)のようなAPIを備えたPython用のシンプルで強力なニューラルネットワークライブラリです。 ありFFnet、迅速かつpythonのための使いやすいフィードフォワードニューラルネットワークトレーニングソリューションは、 simplennがあります 計算インテリジェンスと機械学習のためのライブラリであるPeachがあります このStackOverflow投稿で事実上の標準として記述されているFANN(高速人工ニューラルネットワークライブラリ)へのPythonバインディングがあります。 おそらく他にもあります。 使いやすさ、速度などの基準に基づいて、さまざまなオプションを相互比較する努力をした人はいますか?私自身の使用例は、衛星検索です。たとえば、多くの変数の強く非線形な関数を適合させます。私はニューラルネットのユーザーです。私は彼らの内部の仕組みを研究することに興味はありません。 Stats.SEに関するこの質問は関連していますが、焦点が異なります。

2
(方法)より高速に実行されるシミュレーションを作成しますか?
私はすべての割り当てをCFDで行うためのプログラミング言語としてpythonを使い始めました。プログラミングの経験はほとんどありません。私は機械工学の経験があり、航空宇宙工学の高等教育を追求しています。 CFDの計算面は、方程式を操作したり、数学を実行したりするよりも面倒になります。 プログラムの実行を高速化する一般的なガイドラインは何ですか?物事を並行して行うコツは何ですか?より高速に実行されるコードを記述する方法は? 上記の質問に答えるリソース(私のような素人にとって理解しやすい)はどこで入手できますか?

3
大規模なデータセットを使用した計算問題のI / O戦略
私の研究グループは、分子動力学に焦点を当てています。分子動力学は、明らかに分析しなければならない単一の軌跡の一部としてギガバイトのデータを生成する可能性があります。 私たちが懸念している問題のいくつかは、データセットの相関関係に関係しています。つまり、より逐次的なアプローチを使用するのではなく、メモリ内の大量のデータを追跡して分析する必要があります。 私が知りたいのは、大規模なデータセットのI / Oをスクリプトに処理するための最も効率的な戦略です。通常、Pythonベースのスクリプトを使用するのは、ファイルI / OのコーディングがCやFortranよりもはるかに簡単になるためですが、処理する必要のある行が数千または数億ある場合、最適なアプローチが明確ではありません。Cでコードのファイル入力部分を実行することを検討する必要がありますか、または別の戦略がより便利ですか?(単に配列全体をメモリにプリロードする方が、一連の「チャンク」(メガバイトのオーダー)の順次読み取りよりも優れているでしょうか? いくつかの追加のメモ: 私たちは、「オンライン」ツールではなく、後処理用のスクリプトツールを主に探しています。そのため、Pythonを使用しています。 上記のように、MDシミュレーションを行っています。関心のあるトピックの1つは拡散計算です。そのためには、アインシュタイン拡散係数を取得する必要があります これは、計算を開始する前にすべてのデータをメモリにロードする必要があることを意味します。すべてのデータの塊(個々の時間の記録)は互いに相互作用します。D = 16リムΔ T → ∞⟨ (X(T + Δ T )- X(T))2⟩D=16リム△t→∞⟨(バツ(t+△t)−バツ(t))2⟩D = \frac{1}{6} \lim_{\Delta t \rightarrow \infty} \left< \left( {\bf x}(t + \Delta t) - {\bf x}(t) \right)^2 \right>
15 python  c  efficiency 

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 …

1
倍精度の最新GPUを備えたPythonを使用した科学計算
Pythonを使用して、新世代(K20など)GPUで倍精度科学計算を使用した人はいますか? この技術は急速に進化していることを知っていますが、現在これを行う最善の方法は何ですか?GPUは、人気のある科学的なPythonライブラリnumpyとscipyの範囲外であり、theanoを使用したかったのですが、GPUにはfloat32精度しか使用していないようです。googleがpython gpuの検索結果を提供できることは承知していますが、メーカーに会うために道を進んでいるかどうかに関係なく、プロジェクトのリストよりも多くの洞察を望んでいます。
14 python  gpu  precision 

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 

4
読者が結果をそれらを生成するコードに明確に一致させることができるように、論文のコードを記述する最も役立つ方法は何でしょうか?
私は再現可能な論文を書いていますが、この論文にはPythonスクリプトによって生成される計算結果があります(同様のMATLABスクリプトはほぼ同じ結果を生成します)。読者が論文の計算とコードの計算を一致させることができれば、読者にとって論文の理解が容易になると思います。この作品は抽象的な形式主義を提案しており、論文の例はこの形式主義を読者(より多くはエンジニアになる)にとってより具体的なものにすることになっている。コードはおそらく、計算の実行方法の最も詳細な記録になるので、それを明確にすることで、レビュープロセス中に役立つ可能性があります。 コードと計算結果(図、方程式)の間の対応をより明確にする方法についての提案はありますか? たとえば、論文のさまざまなステップを実装するコード行については、方程式番号を引用できると考えていました(コードとLaTeXの間で相互参照できれば驚くでしょうが、それらに手でラベルを付けるのは問題ありません) 、さまざまな例や図に対応する関数を書くことができます。 def example_1(): # Insert code corresponding to first example pass def figure_1(): # Insert code that generates Figure 1 pass コードが大きく、エンジニアリングで使用されるさまざまな数学的手法が実際に同じである方法を説明しようとしていなかった場合、おそらくコードを明確にすることはそれほど気にしませんが、紙と小さなコードベース、この演習で価値があるかもしれないようです。

1
Python関数で壊滅的なキャンセルを避ける方法は?
関数を数値的に実装するのに問題があります。入力値が大きい場合、結果は非常に大きな数倍と非常に小さな数であるという事実に悩まされます。壊滅的なキャンセルが正しい用語であるかどうかはわかりませんので、正しい場合は修正してください。何かがおかしくなっている証拠: 6の大きな入力に対して、振動と0.0の割り当てを回避するにはどうすればよいですか? 私の機能は次のとおりです。 import numpy as np def func(x): t = np.exp(-np.pi*x) return 1/t*(1-np.sqrt(1-t**2))

2
Matlabの積分がScipyでintegrated.quadより優れているのはなぜですか?
matlabが数値積分とScipyを処理する方法に不満を感じています。以下のテストコードで次の違いを観察します。 Matlabのバージョンは、私のPythonの同等バージョンよりも平均で24倍高速に動作します! Matlabのバージョンは警告なしで積分を計算することができますが、Pythonは nan+nanj 上記の2つの点に関して、Pythonで同じパフォーマンスが得られるようにするにはどうすればよいですか?文書によると、両方の方法は、積分を近似するために「グローバル適応求積法」を使用する必要があります。 以下は、2つのバージョンのコードです(かなり似ていますが、Pythonでは複雑な被積分関数を処理できるように積分関数を作成する必要があります)。 Python import numpy as np from scipy import integrate import time def integral(integrand, a, b, arg): def real_func(x,arg): return np.real(integrand(x,arg)) def imag_func(x,arg): return np.imag(integrand(x,arg)) real_integral = integrate.quad(real_func, a, b, args=(arg)) imag_integral = integrate.quad(imag_func, a, b, args=(arg)) return real_integral[0] + 1j*imag_integral[0] vintegral = np.vectorize(integral) def …

3
NumpyがSVDを実行する方法を理解する
私は、行列のランクと行列方程式の解の両方を計算するために、さまざまな方法を使用しています。関数linalg.svdに出会いました。これを、Gaussian Eliminationでシステムを解くという私自身の努力と比較すると、より速く、より正確に見えるようです。私はこれがどのように可能かを理解しようとしています。 私の知る限り、linalg.svd関数はQRアルゴリズムを使用して、行列の固有値を計算します。私はこれが数学的にどのように機能するかを知っていますが、Numpyがどのようにそれを迅速かつあまり正確に失うことなく行うのかわかりません。 私の質問:numpy.svd関数はどのように機能し、より具体的には(ガウス消去と比較して)高速かつ正確にどのように処理するのですか?

2
Pythonで非常に大きくて疎な隣接行列のすべての固有値を計算する最速の方法は何ですか?
scipy.sparse.linalg.eigshを使用するよりも非常に大きくて疎な隣接行列のすべての固有値と固有ベクトルを計算するより速い方法があるかどうかを把握しようとしていますマトリックスの対称属性。隣接行列もバイナリであるため、より高速な方法があると思います。 ランダムな1000x1000スパース隣接行列を作成し、x230 ubuntu 13.04ラップトップでいくつかの方法を比較しました。 scipy.sparse.linalg.eigs:0.65秒 scipy.sparse.linalg.eigsh:0.44秒 scipy.linalg.eig:6.09秒 scipy.linalg.eigh:1.60秒 スパースeigとeigshで、希望する固有値と固有ベクトルの数であるkを行列のランクに設定します。 問題は、より大きな行列から始まります-9000x9000行列では、scipy.sparse.linalg.eigshに45分かかりました!

2
Pythonで線形制約を使用して最小二乗問題を解く
解決する必要があります 秒。トン。分バツ∥ A X - B ∥22、∑私バツ私= 1 、バツ私≥ 0 、∀ 私は。分バツ‖Aバツ−b‖22、s。t。∑私バツ私=1、バツ私≥0、∀私。\begin{alignat}{1} & \min_{x}\|Ax - b\|^2_{2}, \\ \mathrm{s.t.} & \quad\sum_{i}x_{i} = 1, \\ & \quad x_{i} \geq 0, \quad \forall{i}. \end{alignat} 私はそれがCVXOPTで解決できる二次問題だと思いますが、どうやって解決するかはわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.