PythonのNumPy。 パート2

翻訳者の序文



私たちはpythonのnumpyに関する記事を翻訳し続けています。 最初のパートを読んでいない人のために、こちら: パート1 。 そして他の皆-読書をお楽しみください。







配列を作成する他の方法



arange関数はrange関数に似ていますが、配列を返します。



>>> np.arange(5, dtype=float) array([ 0., 1., 2., 3., 4.]) >>> np.arange(1, 6, 2, dtype=int) array([1, 3, 5])
      
      





zerosおよびones関数は、これらの値で満たされた新しい次元配列を作成します。 これらはおそらく、配列を作成するための最も使いやすい関数です。



 >>> np.ones((2,3), dtype=float) array([[ 1., 1., 1.], [ 1., 1., 1.]]) >>> np.zeros(7, dtype=int) array([0, 0, 0, 0, 0, 0, 0])
      
      





zeros_like関数とones_like関数は、作成済みの配列を変換して、それぞれゼロと1で埋めることができます。



 >>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> np.zeros_like(a) array([[ 0., 0., 0.], [ 0., 0., 0.]]) >>> np.ones_like(a) array([[ 1., 1., 1.], [ 1., 1., 1.]])
      
      





特別な行列を作成するための関数もいくつかあります。 単位で満たされた主対角線を持つ正方行列を作成するには、恒等法を使用します。



 >>> np.identity(4, dtype=float) array([[ 1., 0., 0., 0.], [ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]])
      
      





eye関数は、k番目の対角に1をもつ行列を返します。



 >>> np.eye(4, k=1, dtype=float) array([[ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.], [ 0., 0., 0., 0.]])
      
      





配列の数学的操作



配列に標準の数学演算を使用する場合、原則-element-elementに従う必要があります。 これは、加算、減算などの間、配列が同じサイズでなければならないことを意味します。



 >>> a = np.array([1,2,3], float) >>> b = np.array([5,2,6], float) >>> a + b array([6., 4., 9.]) >>> a – b array([-4., 0., -3.]) >>> a * b array([5., 4., 18.]) >>> b / a array([5., 1., 2.]) >>> a % b array([1., 0., 3.]) >>> b**a array([5., 4., 216.])
      
      





2次元配列の場合、乗算は要素単位のままであり、行列乗算には対応していません。 これには特別な機能がありますが、これについては後で学習します。



 >>> a = np.array([[1,2], [3,4]], float) >>> b = np.array([[2,0], [1,3]], float) >>> a * b array([[2., 0.], [3., 12.]])
      
      





サイズに矛盾がある場合、エラーがスローされます。



 >>> a = np.array([1,2,3], float) >>> b = np.array([4,5], float) >>> a + b Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: operands could not be broadcast together with shapes (3,) (2,)
      
      





ただし、配列の次元が一致しない場合、数学演算を実行するために変換されます。 これは多くの場合、操作を完了するためにより小さな配列が数回使用されることを意味します。 この例を考えてみましょう:



 >>> a = np.array([[1, 2], [3, 4], [5, 6]], float) >>> b = np.array([-1, 3], float) >>> a array([[ 1., 2.], [ 3., 4.], [ 5., 6.]]) >>> b array([-1., 3.]) >>> a + b array([[ 0., 5.], [ 2., 7.], [ 4., 9.]])
      
      





ここで、1次元配列bは、配列aのサイズに対応する2次元に変換されました。 基本的に、bは各「行」に対して数回繰り返されました。 それ以外の場合は、次のように表すことができます。



 array([[-1., 3.], [-1., 3.], [-1., 3.]])
      
      





この場合、Pythonは配列を自動的に変換します。 ただし、変換が役割を果たす場合は、newaxis定数を使用して変換を変更できます。



 >>> a = np.zeros((2,2), float) >>> b = np.array([-1., 3.], float) >>> a array([[ 0., 0.], [0., 0.]]) >>> b array([-1., 3.]) >>> a + b array([[-1., 3.], [-1., 3.]]) >>> a + b[np.newaxis,:] array([[-1., 3.], [-1., 3.]]) >>> a + b[:,np.newaxis] array([[-1., -1.], [ 3., 3.]])
      
      





標準演算子に加えて、numpyには、要素単位で配列に適用できる標準数学関数のライブラリが含まれています。 適切な機能:abs、sign、sqrt、log、log10、exp、sin、cos、tan、arcsin、arccos、arctan、sinh、cosh、tanh、arcsinh、arccosh、およびarctanh。



 >>> a = np.array([1, 4, 9], float) >>> np.sqrt(a) array([ 1., 2., 3.])
      
      





floor、ceil、およびrint関数は、下限、上限、または最も近い(丸められた)値を返します。



 >>> a = np.array([1.1, 1.5, 1.9], float) >>> np.floor(a) array([ 1., 1., 1.]) >>> np.ceil(a) array([ 2., 2., 2.]) >>> np.rint(a) array([ 1., 2., 2.])
      
      





numpyには、2つの重要な数学定数も含まれています。



 >>> np.pi 3.1415926535897931 >>> np.e 2.7182818284590451
      
      





配列要素の繰り返し



リストと同じ方法で配列を反復処理できます。



 >>> a = np.array([1, 4, 5], int) >>> for x in a: ... print x 1 4 5
      
      





多次元配列の場合、ループの各パスが配列の「文字列」を返すように、反復は最初の軸に沿って実行されます。



 >>> a = np.array([[1, 2], [3, 4], [5, 6]], float) >>> for x in a: ... print x [ 1. 2.] [ 3. 4.] [ 5. 6.]
      
      





反復中に複数の割り当ても使用できます。



 >>> a = np.array([[1, 2], [3, 4], [5, 6]], float) >>> for (x, y) in a: ... print x * y 2.0 12.0 30.0
      
      





基本的な配列操作



配列のプロパティを取得するには、多くの関数があります。 要素は合計または乗算できます。



 >>> a = np.array([2, 4, 3], float) >>> a.sum() 9.0 >>> a.prod() 24.0
      
      





この例では、配列関数が使用されました。 独自のnumpy関数を使用することもできます:



 >>> np.sum(a) 9.0 >>> np.prod(a) 24.0
      
      





ほとんどの場合、両方のオプションを使用できます。

一部の機能では、統計データを操作できます。 これらは平均関数(算術平均)、変動、偏差です。



 >>> a = np.array([2, 1, 9], float) >>> a.mean() 4.0 >>> a.var() 12.666666666666666 >>> a.std() 3.5590260840104371
      
      





配列で最小値と最大値を見つけることができます。



 >>> a = np.array([2, 1, 9], float) >>> a.min() 1.0 >>> a.max() 9.0
      
      





argminおよびargmax関数は、最小または最大要素のインデックスを返します。



 >>> a = np.array([2, 1, 9], float) >>> a.argmin() 1 >>> a.argmax() 2
      
      





多次元配列の場合、各関数は追加の軸引数を取り、その値に応じて特定の軸で関数を実行し、実行結果を配列に配置できます。



 >>> a = np.array([[0, 2], [3, -1], [3, 5]], float) >>> a.mean(axis=0) array([ 2., 2.]) >>> a.mean(axis=1) array([ 1., 1., 4.]) >>> a.min(axis=1) array([ 0., -1., 3.]) >>> a.max(axis=0) array([ 3., 5.])
      
      





リストと同様に、配列はソートできます。



 >>> a = np.array([6, 2, 5, -1, 0], float) >>> sorted(a) [-1.0, 0.0, 2.0, 5.0, 6.0] >>> a.sort() >>> a array([-1., 0., 2., 5., 6.])
      
      





配列内の値は、特定の範囲に属するように「縮小」できます。 これは、各x要素にmin(max(x、minval)、maxval)を適用するのと同じです:



 >>> a = np.array([6, 2, 5, -1, 0], float) >>> a.clip(0, 5) array([ 5., 2., 5., 0., 0.])
      
      





一意のアイテムは次のように抽出できます。



 >>> a = np.array([1, 1, 4, 5, 5, 5, 7], float) >>> np.unique(a) array([ 1., 4., 5., 7.])
      
      





2次元配列の場合、対角は次のように取得できます。



 >>> a = np.array([[1, 2], [3, 4]], float) >>> a.diagonal() array([ 1., 4.])
      
      





それで2番目の記事は終わりました。 ご清聴ありがとうございました! じゃあね



All Articles