- 1. 配列生成関数
- 1.1. numpy.arange()
- 1.2. numpy.zeros()
- 1.3. numpy.zeros_like()
- 1.4. numpy.ones()
- 1.5. numpy.ones_like()
- 1.6. numpy.full()
- 1.7. numpy.full_like()
- 1.8. numpy.eye()
- 1.9. numpy.identity()
- 1.10. numpy.matrix()
- 1.11. numpy.linspace()
- 1.12. numpy.logspace()
- 1.13. numpy.geomspace()
- 1.14. numpy.diag()
- 1.15. numpy.fromfunction()
配列生成関数
numpy.arange()
numpy.arange() は連続数字を要素にもつ配列を生成します。
使い方は組み込み関数 range() とほとんど同じです。
numpy.arange(n) と記述すると、0 から n - 1 までの数字が並ぶ配列が生成されます。
# PYTHON_NUMPY_ARRANGE-1
import numpy as np
# 0~9の連続数字配列を作成
x = np.arange(10)
print(x)
[0 1 2 3 4 5 6 7 8 9]
numpy.arange(m, n) と記述すると、m から n - 1 までの連続数字配列が生成されます。
# PYTHON_NUMPY_ARRANGE-2
# 3~8の連続数字配列を作成
x = np.arange(3, 9)
print(x)
[3 4 5 6 7 8]
3 つめの引数は step 数です。numpy.arange(m, n, s) は m から始まって s 間隔で n - 1 までの数字を生成します。
# PYTHON_NUMPY_ARRANGE-3
# 1~9の奇数が並ぶ配列を作成
x = np.arange(1, 10, 2)
print(x)
[1 3 5 7 9]
オプション引数 dtype には要素のデータ型を渡します。
省略すると入力値から類推して自動的にデータ型が決定されます。
# PYTHON_NUMPY_ARRANGE-4
# 0~9のfloat型連続数字配列を作成
x = np.arange(10, dtype = float)
print(x)
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
reshape()関数を使って連続数字の 2 次元配列を生成することもできます。
# PYTHON_NUMPY_ARRANGE-5
# 1~9の連続数字配列を作成
x = np.arange(1, 10).reshape(3, 3)
print(x)
[[1 2 3] [4 5 6] [7 8 9]]
numpy.zeros()
numpy.zeros() は 0 で埋め尽くされた配列を生成します。
numpy.zeros(9) は 9 個の 0.0 が並ぶ配列を生成します。
# PYTHON_NUMPY_ZEROS-1
import numpy as np
# 0で埋め尽くされた要素数9の配列を生成
# データ型は整数(int)
x = np.zeros(9)
print(x)
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
デフォルトでは要素のデータ型が float になっています。
データ型は dtype で指定することができます。
# PYTHON_NUMPY_ZEROS-2
# 0で埋め尽くされた要素数9の配列を生成
x = np.zeros(9, dtype = int)
print(x)
[0 0 0 0 0 0 0 0 0]
shape にタプルを渡して配列の形を指定することができます。
# PYTHON_NUMPY_ZEROS-3
# 0で埋め尽くされた要素数9の配列を生成
# データ型は整数(int)
x = np.zeros((3, 3), dtype = int)
print(x)
[[0 0 0] [0 0 0] [0 0 0]]
numpy.zeros_like()
numpy.zeros_like() は与えられた引数と同じ形状の 0 で埋め尽くされた配列を生成します。
たとえば a に 2 × 3 配列を渡すと、0 で埋め尽くされた 2 × 3 配列が生成されます。
# PYTHON_NUMPY_ZEROSLIKE
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6]])
# arrと同じ形状で全要素0の配列を生成
x = np.zeros_like(arr)
print(x)
[[0 0 0] [0 0 0]]
numpy.ones()
numpy.ones() は 1 で埋め尽くされた配列を生成します。
たとえば、numpy.ones(9) は 9 個の 1 が並ぶ配列を生成します。
データ型は dtype で指定します (デフォルトは float)。
# PYTHON_NUMPY_ONES-1
import numpy as np
# 1で埋め尽くされた要素数9の配列を生成
# データ型は整数(int)
x = np.ones(9, dtype = int)
print(x)
[1 1 1 1 1 1 1 1 1]
shape にタプルを渡して配列の形を指定することができます。
# PYTHON_NUMPY_ONES-2
# 1で埋め尽くされた要素数9の配列を生成
# 各要素のデータ型は整数(int)
x = np.ones((3, 3), dtype = int)
print(x)
[[1 1 1] [1 1 1] [1 1 1]]
numpy.ones_like()
numpy.ones_like() は与えられた引数と同じ形状で全ての要素を 1 とした配列を生成します。
たとえば a に 2 × 4 の配列を渡すと、1 で埋め尽くされた 2 × 4 の配列が生成されます。
# PYTHON_NUMPY_ONESLIKE
import numpy as np
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
# arrと同じ形状で全要素が1の配列を生成
x = np.ones_like(arr)
print(x)
[[1 1 1 1] [1 1 1 1]]
numpy.full()
numpy.full() は同じ要素で埋め尽くされた配列を生成します。
たとえば全ての要素が 5 である 2 × 3 の配列を作りたいときには、shape に (2, 3), fill_value に 5 を渡します。
# PYTHON_NUMPY_FULL
import numpy as np
# 全ての要素が 5 である 2 × 3 の配列を生成
x = np.full((2, 3), 5, dtype = "int32")
print(x)
[[5 5 5] [5 5 5]]
numpy.full_like()
numpy.full_like() は受け取った配列 a と同じ形状をもつ、指定要素 (fill_value) で埋め尽くされた配列を返します。
# PYTHON_NUMPY_FULLLIKE
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
# arrと同じ形状をもち、9で埋め尽くされた配列を生成
x = np.full_like(arr, 9)
print(x)
[[9 9 9 9] [9 9 9 9]]
numpy.eye()
numpy.eye() は対角線上に 1 が並ぶ配列を生成します。
たとえば、3 × 3 の単位配列を作りたいときには引数 N に 3 を渡します。
# PYTHON_NUMPY_EYE-1
import numpy as np
# 3 × 3 の単位配列を生成
x = np.eye(3, dtype = "int32")
print(x)
[[1 0 0] [0 1 0] [0 0 1]]
引数 M には配列の列数を指定します(省略すると M = N です)。引数 k には対角線左上隅の 1 の位置を渡します。列(右)方向にずらす場合は正の値を、行(下)方向にずらす場合は負の値を指定します。
# PYTHON_NUMPY_EYE-2
# 3 × 3 の単位配列を生成
x = np.eye(3, 4, k = 1, dtype = "int32")
print(x)
[[0 1 0 0] [0 0 1 0] [0 0 0 1]]
numpy.identity()
numpy.identity() は主対角成分に 1 が並ぶ正方配列(単位配列)を生成します。
第1引数で配列のサイズを指定します。たとえば、3×3 の単位配列を生成するときは次のようなコードを記述します。
# PYTHON_NUMPY_IDENTITY
# 3×3 の単位配列を生成
x = np.identity(3, dtype = np.int)
print(x)
[[1 0 0] [0 1 0] [0 0 1]]
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング 新品価格 | ![]() |

numpy.matrix()
numpy.matrix() は文字列から配列を生成する関数です。
この関数で配列を生成するときは、各行を ";" で区切って指定します。
# PYTHON_NUMPY_MATRIX-1
import numpy as np
# 2次元配列を生成
x = np.matrix("1 2 3 ; 4 5 6 ; 7 8 9")
print(x)
[[1 2 3] [4 5 6] [7 8 9]]
各要素のデータ型は dtype で指定します。
# PYTHON_NUMPY_MATRIX-2
# 2次元配列を生成
# データ型は複素数(complex)
x = np.matrix("1 2 3 ; 4 5 6", dtype = "complex")
print(x)
[[1.+0.j 2.+0.j 3.+0.j] [1.+0.j 2.+0.j 3.+0.j]]
numpy.linspace()
numpy.linspace() は開始値 (start) から終了値 (stop) まで均等間隔に数字を並べます(すなわち等差数列を生成します)。
第 3 引数 num には要素数を指定します (デフォルトは 50)。
たとえば、[10 20 30 40 50] という配列を作りたいときは次のようなコードを書きます。
# PYTHON_NUMPY_LINSPACE-1
import numpy as np
# 開始値10,終了値50,要素数5の等差数列
# データ型(dtype)はintを指定
x = np.linspace(10, 50, 5, dtype = int)
print(x)
[10 20 30 40 50]
endpoint を False にすると、stop に指定した数を含みません。
# PYTHON_NUMPY_LINSPACE-2
x = np.linspace(10, 50, 5, dtype = int, endpoint = False)
print(x)
[10 18 26 34 42]
retstep は配列のあとに公差を表示するか否かのオプションです。
デフォルトでは False になっているので、表示したいときは True を指定します。
# PYTHON_NUMPY_LINSPACE-3
# 開始値10,終了値3,要素数3の等差数列(公差を表示)
x = np.linspace(10, 20, 3, retstep = True)
print(x)
(array([10., 15., 20.]), 5.0)
numpy.logspace()
numpy.logspace() は対数スケールで等間隔の配列を生成します。
endpoint が True であるとき、配列の最初の要素は base ** start, 最後の要素は base ** stop です。要素の個数は num で指定します。たとえば、$10^2$ から $10^4$ まで 5 個の要素を対数スケールで等間隔に並べる場合は次のコードを記述します。
# PYTHON_NUMPY_LOGSPACE-1
import numpy as np
# 10**2から10**4まで、10を底とする対数スケールで要素が等間隔に並ぶ配列
x = np.logspace(2.0, 4.0, num = 5)
# xの常用対数
y = np.log10(x)
print("x = {}".format(x))
print("y = {}".format(y))
x = [100. 316.22776602 1000. 3162.27766017 10000.] y = [2. 2.5 3. 3.5 4.]
endpoint を False に設定すると、stop を含まない形で配列を生成します。
# PYTHON_NUMPY_LOGSPACE-2
# 10**2から、10を底とする対数スケールで要素が等間隔に5個並ぶ配列
x = np.logspace(2.0, 4.0, num = 5, endpoint = False)
# xの常用対数
y = np.log10(x)
print("x = {}".format(x))
print("y = {}".format(y))
x = [100. 251.18864315 630.95734448 1584.89319246 3981.07170553] y = [2. 2.4 2.8 3.2 3.6]
numpy.geomspace()
numpy.geomspace() は等比数列 (geometric progression) を返します。
たとえば、start=1, stop= 10000, num = 5 を指定すると、1 から 10000 まで公比 10 で 5 個の数が並びます。
# PYTHON_NUMPY_GEOMSPACE-1
# 1から10000までの等比数列
seq = np.geomspace(1, 10000, 5, dtype=np.int64)
print(seq)
[ 1 10 100 1000 10000]
endpoint に False を渡すと、stop で指定した値を含まないように等比数列を生成します。
# PYTHON_NUMPY_GEOMSPACE-2
seq = np.geomspace(1, 10000, 4, endpoint=False)
print(seq)
[ 1. 10. 100. 1000.]
numpy.diag()
numpy.diag() は対角配列を生成、もしくは配列の対角成分を抜き出す関数です。
第1引数 v に 1次元配列を渡すと、渡した配列を右斜めの対角要素とする(それ以外の要素を 0 とする)2次元配列を返します。第2引数 k でオフセットを指定することができます(正ならば列方向、負ならば行方向にずらします)。
# PYTHON_NUMPY_DIAG-1
# 対角成分
v = np.array([1, 2, 3])
# 対角配列を作成
x1 = np.diag(v)
x2 = np.diag(v, 2)
x3 = np.diag(v, -2)
print("{}\n".format(x1))
print("{}\n".format(x2))
print("{}".format(x3))
[[1 0 0] [0 2 0] [0 0 3]] [[0 0 1 0 0] [0 0 0 2 0] [0 0 0 0 3] [0 0 0 0 0] [0 0 0 0 0]] [[0 0 0 0 0] [0 0 0 0 0] [1 0 0 0 0] [0 2 0 0 0] [0 0 3 0 0]]
第1引数 v に 2次元配列を渡すと、配列から右斜めの対角線に並ぶ要素を抜き出して 1 次元配列として返します。第2引数 k はオフセットです。
# PYTHON_NUMPY_DIAG-2
# 配列xを定義
x = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# xの対角成分を抽出
v1 = np.diag(x)
v2 = np.diag(x, 1)
v3 = np.diag(x, -1)
print("v1 = {}".format(v1))
print("v2 = {}".format(v2))
print("v3 = {}".format(v3))
v1 = [1 5 9] v2 = [2 6] v3 = [4 8]
numpy.fromfunction()
numpy.fromfunction() は、第1引数に渡した関数を使って配列を生成します。
たとえば、2変数 i と j の関数を渡すと、2次元配列におけるインデックス (i, j) の要素をその関数にしたがって決定することになります。
# PYTHON_NUMPY_FROMFUNCTION-1
# インデックス(i,j)の要素がi+jとなる配列を生成
x = np.fromfunction(lambda i, j: i + j, (3, 4), dtype = np.int)
print(x)
[[0 1 2 3] [1 2 3 4] [2 3 4 5]]
3変数 i, j, k の関数を渡すと、3次元配列を生成します。
# PYTHON_NUMPY_FROMFUNCTION-2
# インデックス(i,j,k)の要素がi*j+kとなる配列を生成
x = np.fromfunction(lambda i, j, k: i * j + k, (2, 3, 4), dtype = np.int)
print(x)
[[[0 1 2 3] [0 1 2 3] [0 1 2 3]] [[0 1 2 3] [1 2 3 4] [2 3 4 5]]]
コメントを書く