numpyを動かすには、numpyをインストールする必要があります。 インストール方法はPythonインストールページを参照ください。

1.numpy配列の構造と作成

1.1.numpyのデータ型

Numpy配列は基本的に1つのデータ型で構成されます。主に使用するデータ型の表を以下に示します。
データ型 説明
bool True または False
int 整数
uint 符号なし整数
float 浮動小数
complex 複素数(虚数は"j"で表します。ex:2+5j)
object (文字列を扱う場合はobjectを指定します)
int、uint、float、complexの後ろに数字がついている場合があります(int32、float64など)。 これはビット数を表しており、この値に応じて扱える数値の範囲が変わります。 詳細についてはNumpy Manualや別のサイトに譲ります。
また、データ型を短縮形で表すこともできます。
データ型 説明
'b' True または False
'i' 整数
'u' 符号なし整数
'f' 浮動小数
'c' 複素数
'S' 文字列
'U' Unicode文字列

この場合も'i'、'u'、'f'、'c'、'S'、'U'の後ろに値が付きます。 この値はバイトを意味しています。特に'S'、'U'は文字数制限を意味します。

1.2.numpy配列の作成(その1)

Numpy配列はリスト(Pythonの標準機能)から作成できます。
numpy.array( [value1, value2, …] )
#すべてint型で指定した場合
>>> np.array([1, 2, 3])
array([1, 2, 3])

#多次元配列の指定
>>> np.array([[1,2],[3,4]])
array([[1, 2],
       [3, 4]])

#変数を用いてい指定
>>> a = [[1,2],[3,4]]
>>> np.array(a)
array([[1, 2],
       [3, 4]])

Numpy配列に指定するリストの各要素がバラバラの型、例えば(float, int, int)の場合、Numpy配列の各要素の型はアップキャスト(例えばintはfloatに)変換されます。
#1のみfloat型で指定した場合
>>> np.array([1.0, 2, 3])
array([1., 2., 3.])	#すべてfloat型になる(アップキャスト)


これまではリストからNumpy配列を作ってきましたが、逆にNumpy配列をリストに変換できます。
x.tolist()
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x.tolist()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


1.3.numpy配列の作成(その2)

  1. 要素がすべて0の配列
  2. 要素がすべて1の配列
  3. 空要素
  4. 要素がすべて同じ値の配列
  5. 要素がすべて0/1または空配列
  6. 要素がすべて同じ値の配列(その2)
  7. 単位行列
  8. 等差数列
  9. 等比数列
  10. 乱数配列
  11. 円周率、ネイピア数


(1)要素がすべて0の配列

(2)要素がすべて1の配列

  • numpy.zeros( shape, dtype, order )
  • numpy.ones( shape, dtype, order )
引数 設定 デフォルト 説明
shape 必須 - 配列の形(2行3列、1行5列など)を指定します。
dtype 省略可 float64 出力するデータの型を指定します。

#shapeのみ指定
>>> np.zeros(5)
array([0., 0., 0., 0., 0.])		#float型

#多次元配列、dtypeを指定
>>> np.ones((2,3), dtype=int)
array([[1, 1, 1],
       [1, 1, 1]])

節はじめに戻る


(3)空配列

numpy.empty( shape, dtype, order )
引数 設定 デフォルト 説明
shape 必須 - 配列の形(2行3列、1行5列など)を指定します。
dtype 省略可 float64 出力するデータの型を指定します。

空配列の要素には適当な値が入ります(0とは限りません)。
>>> np.empty(5)
array([4.94065646e-324, 3.95252517e-323, 3.95252517e-323, 3.95252517e-323,
       6.69971516e-312])

>>> np.empty((3,2), dtype = int)
array([[1697542254, 2037674093],
       [ 220804392,         10],
       [         0,          0]])

節はじめに戻る


(4)要素がすべて同じ値の配列

numpy.full( shape, fill_value, dtype, order )
引数 設定 デフォルト 説明
shape 必須 - 配列の形(2行3列、1行5列など)を指定します。
fill_value 必須 - 要素の値を指定します。
dtype 省略可 None 出力するデータの型を指定します。 省略時はfill_valueの型を参照します。

空配列の要素には適当な値が入ります(0とは限りません)。
>>> np.full((2,3),5)	#fill_valueをintで指定
array([[5, 5, 5],
       [5, 5, 5]])

>>> np.full((2,3),5.)	#fill_valueをfloatで指定
array([[5., 5., 5.],
       [5., 5., 5.]])

#dtypeを指定する場合
>>> np.full((2,3),5.1,dtype=int)
array([[5, 5, 5],
       [5, 5, 5]])

節はじめに戻る


(5)要素がすべて0/1または空配列(その2)

あらかじめ与えられている配列(prototype)と同じshapeの配列を作成します。
  • numpy.zeros_like( prototype, dtype, order', subok, shape )
  • numpy.ones_like( 同上 )
  • numpy.empty_like( 同上 )
引数 設定 デフォルト 説明
prototype 必須 - 配列の形(2行3列、1行5列など)を指定します。
dtype 省略可 None 出力するデータの型を指定します。

空配列の要素には適当な値が入ります(0とは限りません)。
>>> x = np.array([[1,2,3],[4,5,6]])
>>> np.zeros_like(x)
array([[0, 0, 0],
       [0, 0, 0]])

節はじめに戻る


(6)要素がすべて同じ値の配列(その2)

あらかじめ与えられている配列(prototype)と同じshapeの配列を作成します。
numpy.full_like( prototype, fill_value, dtype, order', subok, shape )
引数 設定 デフォルト 説明
prototype 必須 - 配列の形(2行3列、1行5列など)を指定します。
fill_value 必須 - 要素の値を指定します。
dtype 省略可 None 出力するデータの型を指定します。 指定しない場合はprototypeの型を参照します。

空配列の要素には適当な値が入ります(0とは限りません)。
>>> x = np.array([[1,2,3],[4,5,6]])
>>> np.full_like(x,3.4)
array([[3, 3, 3],
       [3, 3, 3]])	#dtype = Noneなのでxの型を参照

#dtypeを指定する場合
>>> np.full_like(x,3.4,dtype=float)
array([[3.4, 3.4, 3.4],
       [3.4, 3.4, 3.4]])

節はじめに戻る


(7)単位行列

あらかじめ与えられている配列(prototype)と同じshapeの配列を作成します。
numpy.identity( N, dtype )
引数 設定 デフォルト 説明
N 必須 - 配列の行数を指定します。
dtype 省略可 float 出力するデータの型を指定します。

空配列の要素には適当な値が入ります(0とは限りません)。
>>> np.identity(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

単位行列はnumpy.eyeで作ることもできます。
>>> np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

numpy.eyeは正方行列以外にも対応できます。
numpy.eye( N, M, k, dtype, order )
引数 設定 デフォルト 説明
N 必須 - 配列の行数を指定します。
M 省略可 None 配列の列数を指定します。指定しない場合は正方行列になります。
k 省略可 0 k行分行数を上にずらします(下記参照)。
dtype 省略可 float 出力するデータの型を指定します。

#3×5行列かつkに正の値を指定	
>>> np.eye(3,5,k=1)
array([[0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.]])

#3×5行列かつkに負の値を指定
>>> np.eye(3,5,k=-1)
array([[0., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.]])

節はじめに戻る


(8)等差数列

等差数列は、間隔を指定する方法(arange)と要素数を指定する方法(linspace)の二種類あります。

a)間隔を指定

numpy.arange( start, stop, step, dtype )
引数 設定 デフォルト 説明
start 省略可 0 数列の開始値を指定します。
stop 必須 - 数列の終了値を指定します。
ただし、配列にこの値は含まれません。
step 省略可 1 数列の間隔を指定します。
num 省略可 50 数列に含まれる要素数を指定します。
未指定時は50で計算されます。
dtype 省略可 None 出力するデータの型を指定します。

#stopのみ指定する場合
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])	#start = 0、step = 1として計算

#start、stopを指定する場合
>>> np.arange(1, 10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])	#step = 1として計算

#start, stop, stepを指定する場合
>>> np.arange(1,10,3)
array([1, 4, 7])		#stopの値

#型を指定する場合
>>> np.arange(10, dtype=float)
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

#stopの値を含ませたい場合
# → stop指定値にstep値を足したものを与える
>>> np.arange(1,5.5, 0.5)
array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ])

(8)のはじめに戻る

節はじめに戻る


b)要素数を指定

あらかじめ与えられている配列(prototype)と同じshapeの配列を作成します。
numpy.linspace( start, stop, num, endpoint, retstep, dtype, axis )
引数 設定 デフォルト 説明
start 必須 - 数列の開始値を指定します。
stop 必須 - 数列の終了値を指定します。
ただし、配列にこの値は含まれません。
num 省略可 50 数列に含まれる要素数を指定します。
未指定時は50で計算されます。
endpoint 省略可 True Trueの場合、stop値を数列に含めます。
Falseの場合、stop値は数列に含まれません。
retstep 省略可 False Trueのとき、間隔値も返します。
dtype 省略可 None 出力するデータの型を指定します。

#start, stop, numを指定する場合
>>> np.linspace(1,10,10)
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

#start>stopの場合
>>> np.linspace(10,1,10)
array([10.,  9.,  8.,  7.,  6.,  5.,  4.,  3.,  2.,  1.])

#start>stopをarangeで試すと...
>>> np.arange(10,1,1)
array([], dtype=int32)

#endpoint = Falseを指定すると...
>>> np.linspace(1,10,10,endpoint=False)
array([1. , 1.9, 2.8, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1])

#retstep = Trueを指定すると...
>>> np.linspace(1, 10, 10, endpoint=False, retstep=True)
(array([1. , 1.9, 2.8, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1]), 0.9)	#step値も戻される

(8)のはじめに戻る

節はじめに戻る


(9)等比数列

等比数列は、startとstopを値で指定する方法(geomspace)と乗数で指定する方法(logspace)の二種類あります。

a)間隔を指定

numpy.geomspace( start, stop, num, endpoint, dtype, axis )
start~stopの等比数列を作成します。
引数 設定 デフォルト 説明
start 省略可 0 数列の開始値を指定します。
stop 必須 - 数列の終了値を指定します。
ただし、配列にこの値は含まれません。
num 省略可 50 数列に含まれる要素数を指定します。
未指定時は50で計算されます。
endpoint 省略可 True Trueの場合、stop値を数列に含めます。
Falseの場合、stop値は数列に含まれません。
dtype 省略可 None 出力するデータの型を指定します。

#start, stop, stepを指定する場合
>>> np.geomspace(2,16,4)
array([ 2.,  4.,  8., 16.])

#endpointを指定する場合
>>> np.geomspace(2,16,4,endpoint=False)
array([2.        , 3.36358566, 5.65685425, 9.51365692])

#型を指定する場合
>>> np.geomspace(2,16,4,dtype=int)
array([ 2,  4,  7, 16])

(9)のはじめに戻る

節はじめに戻る


b)乗数で指定する場合

base**start~base**stopの等比数列を作成します。
numpy.logspace( start, stop, num, endpoint, base, dtype, axis)
引数 設定 デフォルト 説明
start 必須 - 数列の開始値を指定します。
stop 必須 - 数列の終了値を指定します。
ただし、配列にこの値は含まれません。
num 省略可 50 数列に含まれる要素数を指定します。
未指定時は50で計算されます。
endpoint 省略可 True Trueの場合、stop値を数列に含めます。
Falseの場合、stop値は数列に含まれません。
base 省略可 10.0 logの基底数を指定します。
dtype 省略可 None 出力するデータの型を指定します。

#start, stop, num, baseを指定する場合
>>> np.logspace(0,5,6,base=2)
array([ 1.,  2.,  4.,  8., 16., 32.])

#start>stopの場合
>>> np.logspace(5,0,6,base=2)
array([32., 16.,  8.,  4.,  2.,  1.])

(9)のはじめに戻る

節はじめに戻る


(10)乱数配列

a)0≦x<1の範囲の乱数

numpy.random.rand( d0, d1, …, dn )
d0, d1, …, dnは各次元のサイズを指定します。
np.random.random( size )
引数 設定 デフォルト 説明
size 省略可 0 配列のサイズを指定します。
省略時は、単一値を返します。

これらを比較すると、次のようになります。
#引数を省略した場合
>>> np.random.rand()
0.5831138111507523
>>> np.random.random()
0.8206994971246891

#引数の指定の違い
>>> np.random.rand(2,3)	#各次元ごとにサイズを指定
array([[0.4400977 , 0.66842555, 0.64535645],
       [0.59677005, 0.70571   , 0.77293564]])

>>> np.random.random((2,3))	#タプルで指定
array([[0.94916049, 0.87896769, 0.26404966],
       [0.81138301, 0.50235188, 0.76894298]])

(10)のはじめに戻る

節はじめに戻る


b)標準正規分布に従う乱数

numpy.random.randn( d0, d1, …, dn )
d0, d1, …, dnは各次元のサイズを指定します。
np.random.standard_random( size )
引数 設定 デフォルト 説明
size 省略可 0 配列のサイズを指定します。
省略時は、単一値を返します。

これらの使い方は、a)乱数の作成方法と同じです。
#引数を省略した場合
>>> np.random.randn()
0.42541335005238473
>>> np.random.standard_normal()
1.2661923257773064

#引数の指定の違い
>>> np.random.randn(2,3)
array([[-0.17661379,  0.12670685,  0.45319954],
       [ 2.09014978,  0.976845  , -0.86067321]])

>>> np.random.standard_normal((2,3))
array([[-0.59018026, -1.48878524, -0.47431677],
       [-0.69449072, -0.11950329, -0.99472246]])

(10)のはじめに戻る

節はじめに戻る


c)正規分布に従う乱数

numpy.random.normal( loc, scale, size )
引数 設定 デフォルト 説明
slocal 省略可 0.0 正規分布の平均値を指定します。
scale 省略可 1.0 正規分布の標準偏差を指定します。
size 省略可 None 配列のサイズを指定します。
省略時は、単一値を返します。

#引数を省略した場合
>>> np.random.normal()
-1.1436323563588835

#正規分布の平均、標準偏差σを指定した場合
>>> np.random.normal(10,5)
10.630408150196647

#サイズを指定した場合
>>> np.random.normal(10,5,(2,3))
array([[ 4.53412891, 13.09406599,  9.95520285],
       [18.64170291,  9.23964612,  3.8402792 ]])

(10)のはじめに戻る

節はじめに戻る


d)整数の乱数

numpy.random.randint( low, high, size, dtype )
low≦x<highの範囲の整数値を返します。high = Noneの場合は、0≦x<lowの範囲の整数値を返します。
引数 設定 デフォルト 説明
low 必須 - 乱数を発生させる最小の整数値を指定します。
high 省略可 None 乱数を発生させる最大の整数値を指定します。
size 省略可 None 配列サイズをタプル(**, **, …)で指定します。
省略時は単一値を返します。
dtype 省略可 int 出力するデータの型を指定します。

#lowのみ指定した場合
>>> np.random.randint(10)
4

#low, high, sizeを指定した場合
>>> np.random.randint(100,1000,size=(2,3))
array([[945, 731, 495],
       [264, 812, 464]])

(10)のはじめに戻る

節はじめに戻る


他にも乱数の生成関数はたくさん準備されていますので、Numpyのマニュアルを参考にしてください。
https://numpy.org/doc/stable/index.htmlからnumpy.randomで検索

(11)円周率、ネイピア数

配列ではありませんが、円周率(π)とネイピア数(e)を呼び出すことができます。
  • 円周率π  :np.pi
  • ネイピア数e :np.e
>>> import math	#python数学ライブラリの呼び出し

#円周率(π)
>>> math.pi
3.141592653589793
>>> np.pi
3.141592653589793

#ネイピア数(e)
>>> math.e
2.718281828459045
>>> np.e
2.718281828459045

節はじめに戻る


参考文献