| [[Python]] | [[Python matplotlib]] | [[TensorFlow]] | [[Anaconda]] | [[機械学習]] | [[TeX]] |
==[[Python NumPy]]==
[[Python]] | [[Python matplotlib]] |
*http://www.numpy.org/
**http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
C:\[[Python]]27\Scripts>pip install numpy
===array ベクトル・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(\begin{array}{c}u_1\\u_2\\u_3\end{array}\right)=\left(\begin{array}{c}1\\5\\9\end{array}\right),v=\left(\begin{array}{c}v_1\\v_2\\v_3\end{array}\right)=\left(\begin{array}{c}1\\0\\3\end{array}\right)</math>
<math>u + v=\left(\begin{array}{c}u_1+v_1\\u_2+v_2\\u_3+v_3\end{array}\right)=\left(\begin{array}{c}1+1\\5+0\\9+3\end{array}\right)=\left(\begin{array}{c}2\\5\\12\end{array}\right)</math>
=====ベクトル要素同士の積=====
----
*行ベクトルと列ベクトル、列ベクトルと行ベクトルの計算は可能
*行ベクトル同士、列ベクトル同士の掛け算はできない
====ベクトルの内積====
----
ベクトル同士の積の和を内積という
ベクトルaとbの内積は、
<math>{a}\cdot{b}</math>と表し、
<math>a=\left(\begin{array}{c}2\\3\\\end{array}\right)</math>と<math>b=\left(\begin{array}{c}4\\5\\\end{array}\right)</math>
の内積は第一成分同士、第二成分同士を掛けて和を求める
<math>{a}\cdot{b}=\left(\begin{array}{c}2\\3\\\end{array}\right)\cdot\left(\begin{array}{c}4\\5\\\end{array}\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>
====リストから生成====
----
>>> a
array([10, 20, 30, 40])
====arange を使い配列を生成====
----
=====0から始まる整数の配列を生成=====
----
>>> b = arange(4)
>>> b
====多次元配列====
----
*多次元配列で行列を表現
*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 で次元を取得=====
>>> x = ones( (3,4) )
[ 8, 9, 10, 11]])
====ベクトルの算術演算====----======スカラー演算======----*行列に対してスカラー演算を行うと、すべての成分に対して演算が行われる<pre>>>> m = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype=float)>>> m + 10array([[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 + yarray([5, 7, 9])>>> x - yarray([-3, -3, -3])>>> x * yarray([ 4, 10, 18])>>> x / yarray([0.25, 0.4 , 0.5 ])>>> x % yarray([1, 2, 3])</pre> ======累乗、平方根======----<pre>>>> x = np.array([1,2,3,4], dtype=float)>>> np.power(x,2)array([ 1., 4., 9., 16.])>>> x ** 2array([ 1., 4., 9., 16.])>>> np.sqrt(x)array([1. , 1.41421356, 1.73205081, 2. ])</pre> ======転置行列======----*行列の行と列を入れ替えたもの 行列Aの <math>A=\left(\begin{array}{c}{1}\quad{2}\quad{3}\\{4}\quad{5}\quad{6}\end{array}\right)</math> の転置行列、A'はは <math>A'=\left(\begin{array}{c}{1}\quad{4}\\{2}\quad{5}\\{3}\quad{6}\end{array}\right)</math> *transpose()で求められる <pre>>>> a = np.array([[1,2,3],[4,5,6]],dtype=int)>>> aarray([[1, 2, 3], [4, 5, 6]])>>> np.transpose(a)array([[1, 4], [2, 5], [3, 6]])</pre> ====参照====
*https://qiita.com/supersaiakujin/items/d63c73bb7b5aac43898a
=====箇所を指定=====
----
*行列要素へのインデックスアクセス [行開始 : 行終了, 列開始: 列終了] <pre>>>> marray([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])</pre>======1次元======
----
x[n]
<pre>>>> m[1]array([4., 5., 6.])</pre> <pre>>>> m[1:]array([[4., 5., 6.], [7., 8., 9.]])</pre>======2次元======
----
x[n,m]
<pre>>>> m[1:]array([[4., 5., 6.], [7., 8., 9.]])</pre> =====範囲を指定=====
----
======1次元======
----
x[start:end:step]
======2次元======
----
x[start:end:step,start:end:step]
=====行を抽出=====
----
x[r]
x[r,]
x[r,:]
=====列を抽出=====
----
x[,:c]
<<blockquote>>取り出した値が1次元の配列になるため注意 reshape()<</blockquote>> =====条件を満たすデータを取り出す=====
----
====操作====
----
=====次元が異なる配列の演算=====
----
======それぞれの列に掛ける======
----
>>> x = arange(4)
>>> x * 2
array([0, 2, 4, 6])
======それぞれの行に足し込む======
----
>>> y = arange(10)