Python科学計算のNumPy入門チュートリアル

3951 ワード

前言
NumPyはPythonが大型行列を処理するための極めて速い数学ライブラリである.Pythonでベクトルとマトリクスの演算を行うことができ、多くの下位レベルの関数がCで書かれており、通常のPythonでは達成できない運転速度が得られます.これは、マトリクス内の各要素のデータ型が同じであるため、演算中のタイプ検出が減少するためである.
マトリックスベース
numpyパケットではベクトル,マトリクス,および高次データ構造を配列で表した.彼らは配列から構成され、1次元は1つの配列で表され、2次元は配列に配列が含まれている.
作成

# coding: utf-8
import numpy as np

a = np.array([
 [1.73, 1.68, 1.71, 4],
 [1, 2, 3, 4],
 [1, 2, 3, 4]
])
print type(a) # 

ndarray(N-dimensional array object)はn次元配列を意味する.例では3行4列の2次元配列を表す.
けいじょう
配列のサイズは、shapeプロパティから取得できます.

print a.shape # (3L,4L)

配列の要素数はndarray.size取得:

print a.size # 12

ndarrayのdtypeプロパティを使用すると、配列要素のタイプを取得できます.

print a.dtype # float64

shapeを使用してマトリクスの形状を再設定するか、reshapeメソッドを使用してサイズを変更した新しい配列を作成します.元の配列のshapeは変更されません.

a.shape = 4, 3
b = a.reshape((2, 6))
#   b      ,  a b            ,  b[0][1] = 8   a[0][1]    8

はいれつせいせいnp.arange を使用して配列を作成できます.パラメータはrangeと似ています.

x = np.arange(0, 10, 1) # arguments: start, stop, step

npも使えます.linspace等差数列を作成するには:

x = np.linspace(1, 10, 5) # arguments: start, stop, num    
# [ 1. 3.25 5.5 7.75 10. ]

# np.logspace        

マトリックス演算
演算子に変数を直接参加させます.オペレータの優先度は変わりません.

a = np.random.rand(5, 5)
b = np.random.rand(5, 5)

print a + b
print a - b
print a * b
print a / b
print a ** 2
print a < b
print a > b

1つの配列にはdot() 関数を除いて、これらの動作はすべてユニット動作である.

np_arr = np.array([2,3,34,5,5])
print np.mean(np_arr) #    
print np.median(np_arr) #    
print np.corrcoef(a[0], a[1]) #               
print np.std(np_arr) #    

データ抽出
スライス索引構文:M[lower:upper:step]

a = np.array([1,2,3,4,5])
a[1:3] # array([2, 3])

#        ,       
a[1:3] = [-2, -3] # array([ 1, -2, -3, 4, 5])


b = np.random.rand(5, 5)
b[1:4, 1:4] #    1~4  ,1~4 

b > 0.1 #array([False, False, False, ...])
#         ,              
b[ b > 0.1 ]

# where()           ,                  。           ,             。
c = np.where(b > 0.1)

マトリックス演算
NumPyとMatlabは異なり、多次元配列の演算ではデフォルトでは行列演算は使用されません.配列を行列演算したい場合は、対応する関数を呼び出すことができます.
matrixオブジェクト
numpyライブラリにはmatrixクラスが用意されています.matrixクラスを使用して作成されるのはマトリクスオブジェクトです.これらの加算減算演算はデフォルトでマトリクス方式で計算されるので、matlabとよく似ています.しかし,NumPyにはndarrayとmatrixオブジェクトが同時に存在するため,ユーザは両者を混同しやすい.これはPythonの「明示的に暗黙的より優れている」という原則に反するため,複雑なプログラムでmatrixを使用することは推奨されない.

>>> a = np.matrix([[1,2,3],[5,5,6],[7,9,9]])
>>> a*a**-1
matrix([[ 1.00000000e+00, 1.66533454e-16, -8.32667268e-17],
  [ -2.77555756e-16, 1.00000000e+00, -2.77555756e-17],
  [ 1.66533454e-16, 5.55111512e-17, 1.00000000e+00]])

配列からマトリクスへの変換はm = np.matrix(a)で行うことができ、m.Tを用いてmの回転マトリクスを得ることができる.
マトリックス求逆

m.I * m
=> matrix([[ 1.00000000e+00+0.j, 4.44089210e-16+0.j],
   [ 0.00000000e+00+0.j, 1.00000000e+00+0.j]])

浅いコピーと深いコピー
高性能を得るためには、Pythonの付与値は、浅いコピーと呼ばれる下位オブジェクトをコピーしないことが多い.コピーをコピーするには、copyを使用します.

b = copy(a)

配列要素の遍歴
通常、配列要素の遍歴をできるだけ避けることを望んでいます.反復はベクトル演算よりずっと遅いからです.しかし、反復は避けられない場合もあります.この場合、Pythonのforを使うのが一番便利です.

v = np.array([1,2,3,4])

for element in v:
 print(element)

M = np.array([[1,2], [3,4]])

for row in M:
 print("row", row)
 for element in row:
  print(element)

まとめ
以上がPython科学コンピューティングのNumPyに関するすべての内容ですが、本文の内容は皆さんの勉強や仕事に一定の助けになることを望んでいます.