数学は、非常に重要であると同時に、複雑で時間がかかる膨大な数の概念を扱います。しかしながら、 この問題を解決する本格的なSciPyライブラリを提供します。このSciPyチュートリアルでは、このライブラリを使用する方法と、いくつかの関数とその例を学習します。
先に進む前に、この記事で説明されているすべてのトピックを確認してください。
- SciPyとは何ですか?
- NumPyとSciPy
- SciPyのサブパッケージ
- 基本機能
- 特殊機能
- 統合機能
- 最適化関数
- フーリエ変換関数
- 信号処理機能
- 線形代数
- スパース固有値
- 空間データ構造とアルゴリズム
- 多次元画像処理機能
- ファイルIO
それでは始めましょう。 :)
どのスキャナークラスメソッドが文字列を読み取るか
SciPyとは何ですか?
SciPyは、科学的および数学的問題を解決するために使用されるオープンソースのPythonライブラリです。それは上に構築されています 拡張機能であり、ユーザーはさまざまな高レベルのコマンドを使用してデータを操作および視覚化できます。前述のように、SciPyはNumPyに基づいて構築されているため、SciPyをインポートする場合、NumPyをインポートする必要はありません。
NumPyとSciPy
NumPyとSciPyはどちらも 使用される数学的および数値分析に使用されます。 NumPyには配列データと、並べ替え、インデックス作成などの基本操作が含まれていますが、SciPyにはすべての数値コードが含まれています。 NumPyは多くの 線形代数、フーリエ変換などの解決に役立つSciPyは、これらの関数のフル機能バージョンと他の多くの関数を実際に含むライブラリです。ただし、Pythonを使用して科学的分析を行う場合、SciPyはNumPyに基づいているため、NumPyとSciPyの両方をインストールする必要があります。
SciPyのサブパッケージ:
SciPyには、次の表に示すさまざまな科学計算用のサブパッケージがいくつかあります。
名前 | 説明 |
集まる | クラスタリングアルゴリズム |
定数 | 物理定数および数学定数 |
fftpack | 高速フーリエ変換ルーチン |
統合する | 積分と常微分方程式ソルバー |
補間する | 補間と平滑化スプライン |
私 | 入出力 |
リナルグ | 線形代数 |
私は飛ぶ | N次元画像処理 |
odr | 直交距離回帰 |
最適化 | 最適化と求根ルーチン |
信号 | 信号処理 |
スパース | スパース行列と関連するルーチン |
空間的な | 空間データ構造とアルゴリズム |
特別 | 特殊機能 |
統計 | 統計的分布と関数 |
ただし、詳細な説明については、 公式ドキュメント 。
これらのパッケージは、使用する前に排他的にインポートする必要があります。例えば:
scipyインポートクラスターから
これらの各関数について詳しく説明する前に、まずNumPyとSciPyの両方に共通する関数を見てみましょう。
基本機能:
NumPyとの相互作用:
SciPyはNumPy上に構築されているため、NumPy関数自体を利用して配列を処理できます。これらの関数について詳しく知るには、help()、info()、またはsource()関数を使用するだけです。
助けて():
関数に関する情報を取得するには、 助けて() 関数。この関数を使用する方法は2つあります。
- パラメータなし
- パラメータの使用
上記の両方の方法を示す例を次に示します。
from scipy import cluster help(cluster)#with parameter help()#without parameter
上記のコードを実行すると、最初のhelp()はに関する情報を返します。 集まる サブモジュール。 2番目のhelp()は、ユーザーが情報を検索したいモジュール、キーワードなどの名前を入力するようにユーザーに要求します。この関数の実行を停止するには、「quit」と入力してEnterキーを押します。
info():
この関数は、目的の情報を返します 、モジュールなど。
scipy.info(クラスター)
ソース():
ソースコードは、で書かれたオブジェクトに対してのみ返されます 。この関数は、メソッドまたはオブジェクトがCなどの他の言語で記述されている場合、有用な情報を返しません。ただし、この関数を使用する場合は、次のように実行できます。
scipy.source(cluster)
特別な機能:
SciPyは、楕円などの数理物理学で使用されるいくつかの特殊関数を提供します、便利な関数、ガンマ、ベータなど。すべての関数を検索するには、前述のようにhelp()関数を使用できます。
指数関数と三角関数:
SciPyの特殊関数パッケージは、指数を見つけて三角関数の問題を解決するための多くの関数を提供します。
次の例を考えてみましょう。
例:
from scipy import special a = special.exp10(3)print(a)b = special.exp2(3)print(b)c = special.sindg(90)print(c)d = special.cosdg(45)print( d)
出力:
1000.0
8.0
1.0
0.7071067811865475
SciPyの特殊関数パッケージには、自分で試すことができる他の多くの関数があります。
統合機能:
SciPyは、積分を解くための多くの関数を提供します。常微分積分器から台形公式を使用して積分を計算するまで、SciPyはあらゆるタイプの積分問題を解決するための関数の貯蔵庫です。
一般的な統合:
SiPyはという名前の関数を提供します クワッド 1つの変数を持つ関数の積分を計算します。制限は ±&無限大((±± inf
)無限限界を示します。 quad()関数の構文は次のとおりです。
構文:
quad(func、a、b、args =()、full_output = 0、epsabs = 1.49e-08、epsrel = 1.49e-08、limit = 50、points = None、weight = None、wvar = None、wopts = None 、maxp1 = 50、limlst = 50)
ここで、関数は制限aとbの間に統合されます(無限にすることもできます)。
例:
from scipy import special from scipy importintegrate a = lambda x:special.exp10(x)b = scipy.integrate.quad(a、0、1)print(b)
上記の例では、関数「a」は制限0、1の間で評価されます。このコードを実行すると、次の出力が表示されます。
出力:
(3.9086503371292665、4.3394735994897923e-14)
二重積分関数:
SciPyは提供します dblquad これは、二重積分の計算に使用できます。多くの人が知っているように、二重積分は2つの実変数で構成されます。 dblquad()関数は、制限と関数を定義する他の4つの変数とともに、パラメーターとして統合される関数を受け取ります。 dy そして dx。
例:
scipyインポートから統合a =ラムダy、x:x * y ** 2 b =ラムダx:1 c =ラムダx:-1integrate.dblquad(a、0、2、b、c)
出力:
-1.3333333333333335、1.4802973661668755e-14)
セレンのさまざまなタイプのフレームワーク
SciPyには、三重積分、n積分、ロンベルグ積分などを評価するためのさまざまな関数が用意されており、さらに詳しく調べることができます。必要な機能の詳細をすべて見つけるには、ヘルプ機能を使用してください。
最適化関数:
scipy.optimizeは、ヘルプ関数を使用して確認できる、一般的に使用される多数の最適化アルゴリズムを提供します。
基本的には次のもので構成されます。
- 多変量スカラー関数の制約なしおよび制約付き最小化、つまり 最小化 (例:BFGS、ニュートン共役勾配法、ネルダーミードシンプレックスなど)
- グローバル最適化ルーチン(例:differential_evolution、dual_annealingなど)
- 最小二乗最小化とカーブフィッティング(例:least_squares、curve_fitなど)
- スカラー単変量関数の最小化とルートファインダー(例:minimize_scalarとroot_scalar)
- ハイブリッドPowell、Levenberg-Marquardtなどのアルゴリズムを使用した多変量方程式システムソルバー。
ローゼンブルック機能:
ローゼンブルック関数( rosen )は、勾配ベースの最適化アルゴリズムに使用されるテスト問題です。 SciPyでは次のように定義されています。
例:
numpyをscipy.optimizeからnpとしてインポートしますimportrosen a = 1.2 * np.arange(5)rosen(a)
出力: 7371.0399999999945
ネルダーミード:
ザ・ネルダー–ミード法は、多次元空間で関数の最小/最大を見つけるためによく使用される数値法です。次の例では、最小化方法がネルダーミードアルゴリズムとともに使用されています。
例:
scipyimportからoptimizea = [2.4、1.7、3.1、2.9、0.2] b = optimize.minimize(optimize.rosen、a、method = 'Nelder-Mead')b.x
出力: 配列([0.96570182、0.93255069、0.86939478、0.75497872、0.56793357])
補間関数:
数値解析の分野では、補間とは、既知のデータポイントのセット内に新しいデータポイントを構築することを指します。 SciPyライブラリは、scipy.interpolateという名前のサブパッケージで構成されています。スプライン関数とクラス、1次元および多次元(単変量および多変量)補間クラスなど。
単変量補間:
単変量内挿は、基本的にカーブフィッティングの領域です。一連の2次元データポイントに正確にフィットする曲線を見つけます。 SciPyは提供します interp1d 単変量補間を生成するために利用できる関数。
例:
matplotlib.pyplotをscipyからpltとしてインポートインポート補間x = np.arange(5、20)y = np.exp(x / 3.0)f = interpolate.interp1d(x、y)x1 = np.arange(6、12) y1 = f(x1)# `interp1d`によって返される補間関数を使用plt.plot(x、y、 'o'、x1、y1、 '-')plt.show()
出力:
多変量補間:
多変量補間(空間的な補間)は一種です補間複数の変数で構成される関数。次の例は、 interp2d 関数。
interp2d(x、y、z)関数を使用して2次元グリッドを補間するには、基本的にx、y、z配列を使用して関数を近似します。 f:「z = f(x、y)」 呼び出しメソッドが使用する関数を返します スプライン補間 新しいポイントの価値を見つけるために。
例:
from scipy import interpolate import matplotlib.pyplot as plt x = np.arange(0,10)y = np.arange(10,25)x1、y1 = np.meshgrid(x、y)z = np.tan(xx + yy)f = interpolate.interp2d(x、y、z、kind = 'cubic')x2 = np.arange(2,8)y2 = np.arange(15,20)z2 = f(xnew、ynew)plt。 plot(x、z [0、:]、 'ro-'、x2、z2 [0、:]、 '-')plt.show()
出力:
フーリエ変換関数:
フーリエ解析は、関数を周期成分の合計として表現し、それらの成分から信号を復元する方法です。ザ・ fft 関数を使用して、実数列または複素数列の離散フーリエ変換。
例:
from scipy.fftpack import fft、ifft x = np.array([0,1,2,3])y = fft(x)print(y)
出力: [6. + 0.j-2。+ 2.j-2。+ 0.j -2.-2.j]
同様に、これの逆を使用して見つけることができます ifft 次のように機能します。
例:
rom scipy.fftpack import fft、ifft x = np.array([0,1,2,3])y = ifft(x)print(y)
出力: [1.5 + 0.j -0.5-0.5j -0.5 + 0.j -0.5 + 0.5j]
信号処理機能:
信号処理は音声、画像などの信号を分析、変更、合成します。SciPyは、1次元および2次元データを設計、フィルタリング、および補間できるいくつかの機能を提供します。
フィルタリング:
信号をフィルタリングすることにより、基本的に不要なコンポーネントを信号から削除します。順序付けされたフィルタリングを実行するには、 order_filter 関数。この関数は基本的に、配列に対して順序付きフィルタリングを実行します。この関数の構文は次のとおりです。
構文:
order_filter(a、domain、rank)
a = N次元の入力配列
ドメイン= `a`と同じ次元数のマスク配列
ランク=並べ替え後にリストから要素を選択する非負の数(0が最小で、その後に1…)
例:
from scipy import signal x = np.arange(35).reshape(7、5)domain = np.identity(3)print(x、end = 'nn')print(signal.order_filter(x、domain、1))
出力:
[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]]
[[0. 1. 2. 3. 0.]
[5. 6. 7. 8. 3.]
[10。 11. 12. 13. 8.]
[15。 16. 17. 18. 13.]
[20。 21. 22. 23. 18.]
[25。 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]
波形:
scipy.signalサブパッケージは、波形の生成に使用できるさまざまな関数でも構成されています。そのような機能の1つは チャープ 。この関数はfです周波数掃引コサインジェネレーターと構文は次のとおりです。
構文:
chirp(t、f0、t1、f1、method = ’linear’、phi = 0、vertex_zero = True)
どこ、
例:
scipy.signal import chirpから、スペクトログラムimport matplotlib.pyplot as plt t = np.linspace(6、10、500)w = chirp(t、f0 = 4、f1 = 2、t1 = 5、method = 'linear') plt.plot(t、w)plt.title( 'Linear Chirp')plt.xlabel( 'time in sec)')plt.show()
出力:
線形代数:
線形代数は、ベクトル空間と行列を使用して線形方程式とその表現を扱います。 SciPyは上に構築されていますATLASLAPACKおよびBLASライブラリとは線形代数に関連する問題の解決に非常に高速です。 numpy.linalgのすべての関数に加えて、scipy.linalgは他の多くの高度な関数も提供します。また、numpy.linalgが一緒に使用されていない場合ATLAS LAPACKおよびBLASのサポート、scipy.linalgはnumpy.linalgよりも高速です。
行列の逆行列を見つける:
数学的には、行列Aの逆行列はマトリックスですBそのようなAB = Iどこ私は、として示される主対角下の単位行列で構成されます。B = A-1。 SciPyでは、この逆数は linalg.inv 方法。
例:
numpyをscipyからnpとしてインポートインポートlinalgA = np.array([[1,2]、[4,3]])B = linalg.inv(A)print(B)
出力:
[[-0.6 0.4]
[0.8 -0.2]]
行列式を見つける:
行列の係数から算術的に導出された値は、正方行列の行列式として知られています。 SciPyでは、これは関数を使用して実行できます インクルード これは次の構文を持っています:
構文:
det(a、overwrite_a = False、check_finite = True)
どこ、
a:(M、M)は正方行列です
SASソフトウェアの使用方法
override_a(bool、オプション):データの上書きを許可します
check_finite(bool、オプション):入力行列が有限数のみで構成されているかどうかを確認します
例:
numpyをscipyからnpとしてインポートインポートlinalgA = np.array([[1,2]、[4,3]])B = linalg.det(A)print(B)
出力: -5.0
スパース固有値:
固有値は、線形方程式にリンクされた特定のスカラーのセットです。 ARPACKは、固有値(固有ベクトル)を非常に高速に見つけることができるようにします。 ARPACKの完全な機能はにパックされていますscipy.sparse.linalg.eigsとscipy.sparse.linalg.eigshの2つの高レベルインターフェイス。 eigs。 eigsインターフェースでは、実数または複素数の非対称正方行列の固有値を見つけることができますが、eigshインターフェースには、実数対称または複素エルミート行列のインターフェースが含まれています。
ザ・ eigh 関数は、複雑なエルミート行列または実対称行列の一般化された固有値問題を解きます。
例:
from scipy.linalg import eigh import numpy as np A = np.array([[1、2、3、4]、[4、3、2、1]、[1、4、6、3]、[2、 3、2、5]])a、b = eigh(A)print( '選択された固有値:'、a)print( 'Complex ndarray:'、b)
出力:
選択された固有値:[-2.53382695 1.66735639 3.69488657 12.17158399]
複雑なndarray:[[0.69205614 0.5829305 0.25682823 -0.33954321]
[-0.68277875 0.46838936 0.03700454 -0.5595134]
[0.23275694 -0.29164622 -0.72710245 -0.57627139]
[0.02637572 -0.59644441 0.63560361 -0.48945525]]
空間データ構造とアルゴリズム:
空間データは基本的に、線、点、表面などで構成されるオブジェクトで構成されます。SciPyのscipy.spatialパッケージは計算できますQhullライブラリを使用したボロノイ図、三角測量など。また、最近傍点クエリ用のKDTree実装で構成されています。
ドロネー三角形分割:
数学的には、平面内の離散点のセットに対するドロネー三角形分割は、指定された点のセット内の点がないような三角形分割です。任意の三角形の外接円の内側。
例:
import matplotlib.pyplot as plt from scipy.spatial import Delaunay points = np.array([[0、1]、[1、1]、[1、0]、[0、0]])a = Delaunay(points) #Delaunayオブジェクトprint(a)print(a.simplices)plt.triplot(points [:、0]、points [:、1]、a.simplices)plt.plot(points [:、1]、points [:、 0]、 'o')plt.show()
出力:
多次元画像処理機能:
画像処理は基本的に、情報を取得したり、元の画像から拡張画像を取得したりするために画像に対して操作を実行することを扱います。 scipy.ndimageパッケージは、いくつかの任意の次元の配列で機能するように設計された画像処理および分析機能。
畳み込みと相関:
SciPyは、画像の相関と畳み込みを可能にする多くの関数を提供します。
- 関数 相関1d 特定の軸に沿った1次元相関を計算するために使用できます
- 関数 相関する 指定されたカーネルと任意の配列の多次元相関を可能にします
- 関数 convolve1d 特定の軸に沿った1次元の畳み込みを計算するために使用できます
- 関数 畳み込み 指定されたカーネルで任意の配列の多次元畳み込みを可能にします
例:
numpyをscipy.ndimageからnpとしてインポートしますimportcorrelate1dcorrelate1d([3,5,1,7,2,6,9,4]、weights = [1,2])
出力: array([9、13、7、15、11、14、24、17])
IOファイル:
scipy.ioパッケージは、MATLABファイル、IDLファイル、マトリックスマーケットファイルなど、さまざまな形式のファイルを管理するのに役立つ多くの関数を提供します。
このパッケージを利用するには、次のようにインポートする必要があります。
scipy.ioをsioとしてインポートします
サブパッケージの詳細については、の公式ドキュメントを参照してください。 ファイルIO 。
これで、このSciPyチュートリアルは終了です。あなたがすべてをはっきりと理解したことを願っています。 できるだけ練習してください 。
質問がありますか?この「SciPyチュートリアル」ブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。
Pythonとそのさまざまなアプリケーションに関する詳細な知識を得るには、ライブに登録できます。 24時間年中無休のサポートと生涯アクセス。