| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Python NumPy」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の72版が非表示)
1行目: 1行目:
==Python NumPy==
+
| [[Python]] | [[Python matplotlib]] | [[TensorFlow]] | [[Anaconda]] | [[機械学習]] | [[TeX]] |
[[Python]][[Python matplotlib]]
+
==[[Python NumPy]]==
 
*http://www.numpy.org/
 
*http://www.numpy.org/
  
 
===ドキュメント===
 
===ドキュメント===
 +
----
 
*http://docs.scipy.org/doc/
 
*http://docs.scipy.org/doc/
 
====リファレンス====
 
====リファレンス====
 +
----
 
*https://docs.scipy.org/doc/numpy-1.14.2/genindex.html
 
*https://docs.scipy.org/doc/numpy-1.14.2/genindex.html
  
 
===概要===
 
===概要===
 +
----
 
====NumPy====
 
====NumPy====
 +
----
 
*http://ja.wikipedia.org/wiki/NumPy
 
*http://ja.wikipedia.org/wiki/NumPy
*大部分がCで書かれたPython用の拡張モジュール
+
*大部分がCで書かれた[[Python]]用の拡張モジュール
 
*数値配列、行列を定義し、基本的な操作が可能
 
*数値配列、行列を定義し、基本的な操作が可能
====[Python Scipy] [SciPy]====
+
====[[Python Scipy|SciPy]]====
 +
----
 
*http://ja.wikipedia.org/wiki/SciPy
 
*http://ja.wikipedia.org/wiki/SciPy
*先進的な数学をNumPyを使って行うためのPythonのライブラリ
+
*先進的な数学をNumPyを使って行うための[[Python]]のライブラリ
*信号処理、最適化、統計、など
+
*信号処理、最適化、[[統計]]、など
====[Python matplotlib] [matplotlib]====
+
====[[Python matplotlib|matplotlib]]====
 
*出版物のクオリティで、インタラクティブにプロットするのを容易にするライブラリ
 
*出版物のクオリティで、インタラクティブにプロットするのを容易にするライブラリ
 
==NumPy==
 
==NumPy==
25行目: 30行目:
 
*配列は同じ型の要素のセットであり、正の整数のベクターによりインデックス付けされる
 
*配列は同じ型の要素のセットであり、正の整数のベクターによりインデックス付けされる
 
====Install====
 
====Install====
*http://www.scipy.org/Installing_SciPy/Linux
+
----
 +
*http://www.scipy.org/Installing_SciPy/[[Linux]]
 
=====apt-getを使ってubuntuへインストール=====
 
=====apt-getを使ってubuntuへインストール=====
 +
----
 
  sudo apt-get install python-numpy python-scipy
 
  sudo apt-get install python-numpy python-scipy
=====PIPを使ってインストール=====
+
=====[[PIP]]を使ってインストール=====
 +
----
 +
*https://numpy.org/install/
 
  # pip install numpy
 
  # pip install numpy
=====[Python WindowsにPIPをインストール] [PIPを使ってWindowsにインストール]=====
+
=====[[Python WindowsにPIPをインストール|PIPを使ってWindowsにインストール]]=====
*Microsoft Visual C++ Compiler for Python 2.7
+
*Microsoft Visual C++ Compiler for [[Python]] 2.7
 
**http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
 
**http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
  C:\Python27\Scripts>pip install numpy
+
  C:\[[Python]]27\Scripts>pip install numpy
===配列の生成===
+
===ベクトル・array 配列の生成===
 +
----
 +
*線形代数では要素を縦または横に一列にならべたものをベクトルと呼ぶ
 +
*これは一次元の配列
 +
*多次元配列を表す数学用語の[[TensorFlow|テンソル]]を利用して表すと、1階テンソル
 +
*NumPyでは、array()でベクトルを生成する
 +
====[https://cognicull.com/ja/oczgnusb ベクトル]====
 +
----
 +
*ベクトル記法 ( 1 3 5 ) をndarray で表現すると、array([1,3,5])
 +
*このように横方向に並んだものを「行ベクトル」という
 +
*要素が3つあるので、「3次元行ベクトル」 となり、前から「第n成分」とよぶ
 +
*ベクトル同士の演算は、次元数が同じことが条件
 +
 
 +
*ベクトル同士の計算は以下のように行われる
 +
<math>(a_1 \quad a_2  \quad a_3) \quad  + \quad  (b_1 \quad  b_2 \quad  b_3) \quad  =  \quad (a_1  + b_1 \quad  a_2 + b_2 \quad  a_3  + b_3)</math>
 +
 
 +
*行ベクトルであれ列ベクトルであれ同様
 +
 
 +
<math>u=\left(u1u2u3\right)=\left(159\right),v=\left(v1v2v3\right)=\left(103\right)</math>
 +
 
 +
<math>u + v=\left(u1+v1u2+v2u3+v3\right)=\left(1+15+09+3\right)=\left(2512\right)</math>
 +
 
 +
=====ベクトル要素同士の積=====
 +
----
 +
*行ベクトルと列ベクトル、列ベクトルと行ベクトルの計算は可能
 +
*行ベクトル同士、列ベクトル同士の掛け算はできない
 +
 
 +
====ベクトルの内積====
 +
----
 +
ベクトル同士の積の和を内積という
 +
ベクトルaとbの内積は、
 +
 
 +
<math>{a}\cdot{b}</math>と表し、
 +
<math>a=\left(23\right)</math>と<math>b=\left(45\right)</math>
 +
の内積は第一成分同士、第二成分同士を掛けて和を求める
 +
 
 +
<math>{a}\cdot{b}=\left(23\right)\cdot\left(45\right)={2}\times{4}+{3}\times{5}=23</math>
 +
 
 +
ndarrayオブジェクトでは、dot()メソッド
 +
<pre>
 +
>>> a = np.array([2,3])
 +
>>> b = np.array([4,5])
 +
>>> np.dot(a, b)
 +
23
 +
</pre>
 +
 
 
====リストから生成====
 
====リストから生成====
 +
----
 
  &gt;&gt;&gt; from numpy import *
 
  &gt;&gt;&gt; from numpy import *
 
  &gt;&gt;&gt; a = array( [ 10, 20, 30, 40 ] )
 
  &gt;&gt;&gt; a = array( [ 10, 20, 30, 40 ] )
 
  &gt;&gt;&gt; a
 
  &gt;&gt;&gt; a
 
  array([10, 20, 30, 40])
 
  array([10, 20, 30, 40])
 +
 
====arange を使い配列を生成====
 
====arange を使い配列を生成====
 +
----
 
  arange([start,] stop[, step,], dtype=None)
 
  arange([start,] stop[, step,], dtype=None)
  
 
=====0から始まる整数の配列を生成=====
 
=====0から始まる整数の配列を生成=====
 +
----
 
  &gt;&gt;&gt; b = arange(4)
 
  &gt;&gt;&gt; b = arange(4)
 
  &gt;&gt;&gt; b
 
  &gt;&gt;&gt; b
49行目: 107行目:
  
 
=====0から3まで 0.5 きざみの配列を生成=====
 
=====0から3まで 0.5 きざみの配列を生成=====
 +
----
 
  &gt;&gt;&gt; np.arange(0,3,0.5)
 
  &gt;&gt;&gt; np.arange(0,3,0.5)
 
  array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5])
 
  array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5])
 
====等しく割り付けられた配列を作成====
 
====等しく割り付けられた配列を作成====
 +
----
 
  &gt;&gt;&gt; c = linspace(-pi,pi,3)
 
  &gt;&gt;&gt; c = linspace(-pi,pi,3)
 
  &gt;&gt;&gt; c
 
  &gt;&gt;&gt; c
63行目: 123行目:
  
 
====多次元配列====
 
====多次元配列====
 +
----
 +
*多次元配列で行列を表現
 +
*NumPyは多次元配列に対応
 +
*一次元の配列(array引数にリスト)はベクトル(vector)、二次元配列(array引数にネストされたリスト)は行列(matrix)となる
 +
テンソルでいうと、2階テンソル
 +
<pre>
 +
>>> matrix = np.array([[1,2,3],
 +
...                    [4,5,6],
 +
...                    [7,8,9]], dtype=float)
 +
>>> matrix
 +
array([[1., 2., 3.],
 +
      [4., 5., 6.],
 +
      [7., 8., 9.]])
 +
</pre>
 +
=====[https://cognicull.com/ja/vck4ud4k 行列]=====
 +
----
 +
*行列に書かれた数字のことを成分と呼ぶ
 +
*[https://cognicull.com/ja/vck4ud4k 正方行列]
 +
*[https://cognicull.com/ja/vck4ud4k 対角成分]
 +
 +
=====shape で次元を取得=====
 
  &gt;&gt;&gt; x = ones( (3,4) )
 
  &gt;&gt;&gt; x = ones( (3,4) )
 
  &gt;&gt;&gt; x
 
  &gt;&gt;&gt; x
71行目: 152行目:
 
  (3, 4)
 
  (3, 4)
  
====既存の配列の次元を変更====
+
=====shape 既存の配列の次元を変更=====
 +
----
 
  &gt;&gt;&gt; y = arange(12)
 
  &gt;&gt;&gt; y = arange(12)
 
  &gt;&gt;&gt; y
 
  &gt;&gt;&gt; y
81行目: 163行目:
 
         [ 8,  9, 10, 11]])
 
         [ 8,  9, 10, 11]])
  
===参照===
+
====ベクトルの算術演算====
 +
----
 +
======スカラー演算======
 +
----
 +
*行列に対してスカラー演算を行うと、すべての成分に対して演算が行われる
 +
<pre>
 +
>>> m = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype=float)
 +
>>> m + 10
 +
array([[11., 12., 13.],
 +
      [14., 15., 16.],
 +
      [17., 18., 19.]])
 +
</pre>
 +
 
 +
======四則演算======
 +
----
 +
*ベクトルのx,y要素数が同じであれば、各要素ごとの算術演算が可能
 +
<pre>
 +
>>> import numpy as np
 +
>>> x = np.array([1,2,3])
 +
>>> y = np.array([4,5,6])
 +
>>> x + y
 +
array([5, 7, 9])
 +
>>> x - y
 +
array([-3, -3, -3])
 +
>>> x * y
 +
array([ 4, 10, 18])
 +
>>> x / y
 +
array([0.25, 0.4 , 0.5 ])
 +
>>> x % y
 +
array([1, 2, 3])
 +
</pre>
 +
 
 +
======累乗、平方根======
 +
----
 +
<pre>
 +
>>> x = np.array([1,2,3,4], dtype=float)
 +
>>> np.power(x,2)
 +
array([ 1.,  4.,  9., 16.])
 +
>>> x ** 2
 +
array([ 1.,  4.,  9., 16.])
 +
>>> np.sqrt(x)
 +
array([1.        , 1.41421356, 1.73205081, 2.        ])
 +
</pre>
 +
 
 +
======転置行列======
 +
----
 +
*行列の行と列を入れ替えたもの
 +
 
 +
行列Aの
 +
 
 +
<math>A=\left(123456\right)</math>
 +
 
 +
の転置行列、A'はは
 +
 
 +
<math>A'=\left(142536\right)</math>
 +
 
 +
*transpose()で求められる
 +
 
 +
<pre>
 +
>>> a = np.array([[1,2,3],[4,5,6]],dtype=int)
 +
>>> a
 +
array([[1, 2, 3],
 +
      [4, 5, 6]])
 +
>>> np.transpose(a)
 +
array([[1, 4],
 +
      [2, 5],
 +
      [3, 6]])
 +
</pre>
 +
 
 +
====参照====
 
*https://qiita.com/supersaiakujin/items/d63c73bb7b5aac43898a
 
*https://qiita.com/supersaiakujin/items/d63c73bb7b5aac43898a
====箇所を指定====
+
=====箇所を指定=====
=====1次元=====
+
----
 +
*行列要素へのインデックスアクセス
 +
[行開始 : 行終了, 列開始: 列終了]
 +
 
 +
<pre>
 +
>>> m
 +
array([[1., 2., 3.],
 +
      [4., 5., 6.],
 +
      [7., 8., 9.]])
 +
</pre>
 +
======1次元======
 +
----
 
  x[n]
 
  x[n]
=====2次元=====
+
 
 +
<pre>
 +
>>> m[1]
 +
array([4., 5., 6.])
 +
</pre>
 +
 
 +
<pre>
 +
>>> m[1:]
 +
array([[4., 5., 6.],
 +
      [7., 8., 9.]])
 +
</pre>
 +
======2次元======
 +
----
 
  x[n,m]
 
  x[n,m]
====範囲を指定====
+
 
=====1次元=====
+
<pre>
 +
>>> m[1:]
 +
array([[4., 5., 6.],
 +
      [7., 8., 9.]])
 +
</pre>
 +
 
 +
=====範囲を指定=====
 +
----
 +
======1次元======
 +
----
 
  x[start:end:step]
 
  x[start:end:step]
=====2次元=====
+
======2次元======
 +
----
 
  x[start:end:step,start:end:step]
 
  x[start:end:step,start:end:step]
====行を抽出====
+
=====行を抽出=====
 +
----
 
  x[r]
 
  x[r]
 
  x[r,]
 
  x[r,]
 
  x[r,:]
 
  x[r,:]
====列を抽出====
+
=====列を抽出=====
 +
----
 
  x[,:c]
 
  x[,:c]
&lt;blockquote&gt;取り出した値が1次元の配列になるため注意 reshape()&lt;/blockquote&gt;
+
<blockquote>取り出した値が1次元の配列になるため注意 reshape()</blockquote>
====条件を満たすデータを取り出す====
 
 
  
 +
=====条件を満たすデータを取り出す=====
 +
----
  
 
+
====操作====
===操作===
+
----
====次元が異なる配列の演算====
+
=====次元が異なる配列の演算=====
=====それぞれの列に掛ける=====
+
----
 +
======それぞれの列に掛ける======
 +
----
 
  &gt;&gt;&gt; x = arange(4)
 
  &gt;&gt;&gt; x = arange(4)
 
  &gt;&gt;&gt; x
 
  &gt;&gt;&gt; x
113行目: 301行目:
 
  &gt;&gt;&gt; x * 2
 
  &gt;&gt;&gt; x * 2
 
  array([0, 2, 4, 6])
 
  array([0, 2, 4, 6])
 
+
======それぞれの行に足し込む======
=====それぞれの行に足し込む=====
+
----
 
  &gt;&gt;&gt; y = arange(10)
 
  &gt;&gt;&gt; y = arange(10)
 
  &gt;&gt;&gt; y.shape = (2,5)
 
  &gt;&gt;&gt; y.shape = (2,5)

2021年10月24日 (日) 00:49時点における最新版

| Python | Python matplotlib | TensorFlow | Anaconda | 機械学習 | TeX |

Python NumPy

ドキュメント


リファレンス


概要


NumPy


SciPy


matplotlib

  • 出版物のクオリティで、インタラクティブにプロットするのを容易にするライブラリ

NumPy

  • NumPyは多次元配列を扱うライブラリで、主に扱うデータ型は配列である
  • 配列は同じ型の要素のセットであり、正の整数のベクターによりインデックス付けされる

Install


apt-getを使ってubuntuへインストール

  1. sudo apt-get install python-numpy python-scipy
PIPを使ってインストール

  1. # pip install numpy
PIPを使ってWindowsにインストール
  1. C:\Python27\Scripts>pip install numpy

ベクトル・array 配列の生成


  • 線形代数では要素を縦または横に一列にならべたものをベクトルと呼ぶ
  • これは一次元の配列
  • 多次元配列を表す数学用語のテンソルを利用して表すと、1階テンソル
  • NumPyでは、array()でベクトルを生成する

ベクトル


  • ベクトル記法 ( 1 3 5 ) をndarray で表現すると、array([1,3,5])
  • このように横方向に並んだものを「行ベクトル」という
  • 要素が3つあるので、「3次元行ベクトル」 となり、前から「第n成分」とよぶ
  • ベクトル同士の演算は、次元数が同じことが条件
  • ベクトル同士の計算は以下のように行われる

(a1a2a3)+(b1b2b3)=(a1+b1a2+b2a3+b3)

  • 行ベクトルであれ列ベクトルであれ同様

u=(u1u2u3)=(159),v=(v1v2v3)=(103)

u+v=(u1+v1u2+v2u3+v3)=(1+15+09+3)=(2512)

ベクトル要素同士の積

  • 行ベクトルと列ベクトル、列ベクトルと行ベクトルの計算は可能
  • 行ベクトル同士、列ベクトル同士の掛け算はできない

ベクトルの内積


ベクトル同士の積の和を内積という ベクトルaとbの内積は、

abと表し、 a=(23)b=(45) の内積は第一成分同士、第二成分同士を掛けて和を求める

ab=(23)(45)=2×4+3×5=23

ndarrayオブジェクトでは、dot()メソッド

  1. >>> a = np.array([2,3])
  2. >>> b = np.array([4,5])
  3. >>> np.dot(a, b)
  4. 23

リストから生成


  1. >>> from numpy import *
  2. >>> a = array( [ 10, 20, 30, 40 ] )
  3. >>> a
  4. array([10, 20, 30, 40])

arange を使い配列を生成


  1. arange([start,] stop[, step,], dtype=None)
0から始まる整数の配列を生成

  1. >>> b = arange(4)
  2. >>> b
  3. array([0, 1, 2, 3])
0から3まで 0.5 きざみの配列を生成

  1. >>> np.arange(0,3,0.5)
  2. array([ 0. , 0.5, 1. , 1.5, 2. , 2.5])

等しく割り付けられた配列を作成


  1. >>> c = linspace(-pi,pi,3)
  2. >>> c
  3. array([-3.14159265, 0. , 3.14159265])

既存の配列から生成

  1. >>> a1 = array([10,20,30])
  2. >>> a2 = array([1,2,3])
  3. >>> a3 = (a1 + a2) * 2
  4. >>> a3
  5. array([22, 44, 66])

多次元配列


  • 多次元配列で行列を表現
  • NumPyは多次元配列に対応
  • 一次元の配列(array引数にリスト)はベクトル(vector)、二次元配列(array引数にネストされたリスト)は行列(matrix)となる

テンソルでいうと、2階テンソル

  1. >>> matrix = np.array([[1,2,3],
  2. ... [4,5,6],
  3. ... [7,8,9]], dtype=float)
  4. >>> matrix
  5. array([[1., 2., 3.],
  6. [4., 5., 6.],
  7. [7., 8., 9.]])
行列

shape で次元を取得
  1. >>> x = ones( (3,4) )
  2. >>> x
  3. array([[ 1., 1., 1., 1.],
  4. [ 1., 1., 1., 1.],
  5. [ 1., 1., 1., 1.]])
  6. >>> x.shape # タプルで次元を取得
  7. (3, 4)
shape 既存の配列の次元を変更

  1. >>> y = arange(12)
  2. >>> y
  3. array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
  4. >>> y.shape = (3,4)
  5. >>> y
  6. array([[ 0, 1, 2, 3],
  7. [ 4, 5, 6, 7],
  8. [ 8, 9, 10, 11]])

ベクトルの算術演算


スカラー演算

  • 行列に対してスカラー演算を行うと、すべての成分に対して演算が行われる
  1. >>> m = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype=float)
  2. >>> m + 10
  3. array([[11., 12., 13.],
  4. [14., 15., 16.],
  5. [17., 18., 19.]])
四則演算

  • ベクトルのx,y要素数が同じであれば、各要素ごとの算術演算が可能
  1. >>> import numpy as np
  2. >>> x = np.array([1,2,3])
  3. >>> y = np.array([4,5,6])
  4. >>> x + y
  5. array([5, 7, 9])
  6. >>> x - y
  7. array([-3, -3, -3])
  8. >>> x * y
  9. array([ 4, 10, 18])
  10. >>> x / y
  11. array([0.25, 0.4 , 0.5 ])
  12. >>>% y
  13. array([1, 2, 3])
累乗、平方根

  1. >>> x = np.array([1,2,3,4], dtype=float)
  2. >>> np.power(x,2)
  3. array([ 1., 4., 9., 16.])
  4. >>> x ** 2
  5. array([ 1., 4., 9., 16.])
  6. >>> np.sqrt(x)
  7. array([1. , 1.41421356, 1.73205081, 2. ])
転置行列

  • 行列の行と列を入れ替えたもの

行列Aの

A=(123456)

の転置行列、A'はは

A=(142536)

  • transpose()で求められる
  1. >>> a = np.array([[1,2,3],[4,5,6]],dtype=int)
  2. >>> a
  3. array([[1, 2, 3],
  4. [4, 5, 6]])
  5. >>> np.transpose(a)
  6. array([[1, 4],
  7. [2, 5],
  8. [3, 6]])

参照

箇所を指定

  • 行列要素へのインデックスアクセス
  1. [行開始 : 行終了, 列開始: 列終了]
  1. >>> m
  2. array([[1., 2., 3.],
  3. [4., 5., 6.],
  4. [7., 8., 9.]])
1次元

  1. x[n]
  1. >>> m[1]
  2. array([4., 5., 6.])
  1. >>> m[1:]
  2. array([[4., 5., 6.],
  3. [7., 8., 9.]])
2次元

  1. x[n,m]
  1. >>> m[1:]
  2. array([[4., 5., 6.],
  3. [7., 8., 9.]])
範囲を指定

1次元

  1. x[start:end:step]
2次元

  1. x[start:end:step,start:end:step]
行を抽出

  1. x[r]
  2. x[r,]
  3. x[r,:]
列を抽出

  1. x[,:c]

取り出した値が1次元の配列になるため注意 reshape()

条件を満たすデータを取り出す

操作


次元が異なる配列の演算

それぞれの列に掛ける

  1. >>> x = arange(4)
  2. >>> x
  3. array([0, 1, 2, 3])
  4. >>> x * 2
  5. array([0, 2, 4, 6])
それぞれの行に足し込む

  1. >>> y = arange(10)
  2. >>> y.shape = (2,5)
  3. >>> y
  4. array([[0, 1, 2, 3, 4],
  5. [5, 6, 7, 8, 9]])
  6. >>> y1 = array([10,20,30,40,50])
  7. >>> y2 = y + y1
  8. >>> y2
  9. array([[10, 21, 32, 43, 54],
  10. [15, 26, 37, 48, 59]])