==| [[Python NumPy==]] | [[Pythonmatplotlib]] | [[TensorFlow]] | [[Anaconda]] | [[機械学習]] | [[TeX]]| ==[[Python matplotlibNumPy]]==
*http://www.numpy.org/
===ドキュメント===
----
*http://docs.scipy.org/doc/
====リファレンス====
----
*https://docs.scipy.org/doc/numpy-1.14.2/genindex.html
===概要===
----
====NumPy====
----
*http://ja.wikipedia.org/wiki/NumPy
*大部分がCで書かれたPython用の拡張モジュール大部分がCで書かれた[[Python]]用の拡張モジュール
*数値配列、行列を定義し、基本的な操作が可能
====[[Python Scipy|SciPy] [SciPy]====----
*http://ja.wikipedia.org/wiki/SciPy
*先進的な数学をNumPyを使って行うためのPythonのライブラリ先進的な数学をNumPyを使って行うための[[Python]]のライブラリ*信号処理、最適化、統計、など信号処理、最適化、[[統計]]、など====[[Python matplotlib|matplotlib] [matplotlib]====
*出版物のクオリティで、インタラクティブにプロットするのを容易にするライブラリ
==NumPy==
*配列は同じ型の要素のセットであり、正の整数のベクターによりインデックス付けされる
====Install====
----*http://www.scipy.org/Installing_SciPy/[[Linux]]
=====apt-getを使ってubuntuへインストール=====
----
sudo apt-get install python-numpy python-scipy
=====PIPを使ってインストール[[PIP]]を使ってインストール=====----*https://numpy.org/install/
# pip install numpy
=====[[Python WindowsにPIPをインストール|PIPを使ってWindowsにインストール] [PIPを使ってWindowsにインストール]=====*Microsoft Visual C++ Compiler for [[Python ]] 2.7
**http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
C:\Python27[[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(\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>
====リストから生成====
----
>>> from numpy import *
>>> a = array( [ 10, 20, 30, 40 ] )
>>> a
array([10, 20, 30, 40])
====arange を使い配列を生成====
----
arange([start,] stop[, step,], dtype=None)
=====0から始まる整数の配列を生成=====
----
>>> b = arange(4)
>>> b
=====0から3まで 0.5 きざみの配列を生成=====
----
>>> np.arange(0,3,0.5)
array([ 0. , 0.5, 1. , 1.5, 2. , 2.5])
====等しく割り付けられた配列を作成====
----
>>> c = linspace(-pi,pi,3)
>>> c
====多次元配列====
----
*多次元配列で行列を表現
*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) )
>>> x
(3, 4)
=====shape 既存の配列の次元を変更=====----
>>> y = arange(12)
>>> y
[ 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
>>> x * 2
array([0, 2, 4, 6])
======それぞれの行に足し込む======----
>>> y = arange(10)
>>> y.shape = (2,5)