python3 -m pip install numpy
$ python3 -V Python 3.10.6 $ python3 -m pip freeze | grep numpy numpy==1.24.1
import numpy as np
python3 -m pip install matplotlib
$ python3 -m pip freeze | grep matplotlib matplotlib==3.6.2
リスト : numpy と matplotlib の簡単な使用例 import math import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi, 100) plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) # plt.savefig("testplt.png", dpi=50) plt.show()
>>> import numpy as np >>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a.dtype dtype('int64') >>> b = np.array([1, 2, 3, 4, 5], np.float_) >>> b array([1., 2., 3., 4., 5.]) >>> b.dtype dtype('float64') >>> c = np.array([1, 2, 3, 4, 5], 'u1') >>> c array([1, 2, 3, 4, 5], dtype=uint8) >>> d = np.array([1, 2, 3, 4], dtype = np.complex_) >>> d array([1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])
>>> a.flags C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False >>> a.ndim 2 >>> a.size 9 >>> a.shape (3, 3) >>> a.itemsize 8 >>> a.strides (24, 8) >>> a.nbytes 72
>>> np.zeros(4) array([0., 0., 0., 0.]) >>> np.zeros((3, 3), 'i') array([[0, 0, 0], [0, 0, 0], [0, 0, 0]], dtype=int32) >>> np.ones((2, 2, 2), 'i') array([[[1, 1], [1, 1]], [[1, 1], [1, 1]]], dtype=int32) >>> np.empty(5) array([0., 0., 0., 0., 0.]) >>> np.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.arange(0, 10, 2) array([0, 2, 4, 6, 8]) >>> np.linspace(1, 10, 10) array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) >>> np.linspace(0, 1, 9) array([0. , 0.125, 0.25 , 0.375, 0.5 , 0.625, 0.75 , 0.875, 1. ]) >>> np.linspace(0, 1, 11) array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) >>> np.tile([1, 2, 3], 4) array([1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]) >>> np.identity(3) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) >>> np.eye(3, 4) array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.]]) >>> np.tri(4) array([[1., 0., 0., 0.], [1., 1., 0., 0.], [1., 1., 1., 0.], [1., 1., 1., 1.]]) >>> np.diag(np.tri(4)) array([1., 1., 1., 1.]) >>> np.diag([1, 1, 1]) array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) >>> np.fromfunction(lambda x: x, (10,), dtype='int_') array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.fromfunction(lambda x, y: x + y, (4, 4), dtype='int_') array([[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]])
>>> xs = np.arange(10) >>> xs array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> xs[0] 0 >>> xs[9] 9 >>> xs[2:8] array([2, 3, 4, 5, 6, 7]) >>> xs[::2] = 0 >>> xs array([0, 1, 0, 3, 0, 5, 0, 7, 0, 9]) >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a[0] array([1, 2, 3]) >>> a[0, 0] 1 >>> a[2] array([7, 8, 9]) >>> a[2, 2] 9 >>> a[:2, :2] array([[1, 2], [4, 5]]) >>> a[1:, 1:] array([[5, 6], [8, 9]]) >>> a[1:, :] array([[4, 5, 6], [7, 8, 9]]) >>> a[1, 1] = 100 >>> a array([[ 1, 2, 3], [ 4, 100, 6], [ 7, 8, 9]]) >>> a[:2, :2] = 0 >>> a array([[0, 0, 3], [0, 0, 6], [7, 8, 9]]) >>> a[:2, :2] = np.array([[10, 20], [40, 50]]) >>> a array([[10, 20, 3], [40, 50, 6], [ 7, 8, 9]])
>>> a = np.array([[1, 2, 3], [4, 5, 6]]) >>> a array([[1, 2, 3], [4, 5, 6]]) >>> a + 10 array([[11, 12, 13], [14, 15, 16]]) >>> a * 10 array([[10, 20, 30], [40, 50, 60]]) >>> a - 10 array([[-9, -8, -7], [-6, -5, -4]]) >>> a / 10 array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]) >>> b = np.array([[3, 2, 1], [6, 5, 4]]) >>> b array([[3, 2, 1], [6, 5, 4]]) >>> a + b array([[ 4, 4, 4], [10, 10, 10]]) >>> a - b array([[-2, 0, 2], [-2, 0, 2]]) >>> a * b array([[ 3, 4, 3], [24, 25, 24]]) >>> a / b array([[0.33333333, 1. , 3. ], [0.66666667, 1. , 1.5 ]]) >>> b.T array([[3, 6], [2, 5], [1, 4]]) >>> c = a @ b.T >>> c array([[10, 28], [28, 73]]) >>> i = np.identity(2, 'int') >>> i array([[1, 0], [0, 1]]) >>> c @ i array([[10, 28], [28, 73]]) >>> i @ c array([[10, 28], [28, 73]]) >>> x = np.array([1, 2, 3]) >>> y = np.array([4, 5, 6]) >>> x @ y 32 >>> x.dot(y) 32 >>> np.vdot(x, y) 32 >>> z = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> z array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> z @ x array([14, 32, 50])
>>> f = np.matrix([[1, 1], [1, 0]], 'int64') >>> f matrix([[1, 1], [1, 0]], dtype=int64) >>> np.array(f) array([[1, 1], [1, 0]], dtype=int64) >>> f.A array([[1, 1], [1, 0]], dtype=int64) >>> np.matrix(f.A) matrix([[1, 1], [1, 0]], dtype=int64) >>> f ** 10 matrix([[89, 55], [55, 34]], dtype=int64) >>> f ** 20 matrix([[10946, 6765], [ 6765, 4181]], dtype=int64) >>> f ** 40 matrix([[165580141, 102334155], [102334155, 63245986]], dtype=int64) >>> def fibo(n): ... if n == 0 or n == 1: return n ... else: ... f = np.matrix([[1, 1], [1, 0]]) ... return (f ** (n - 1))[0, 0] ... >>> for x in range(20): print(fibo(x)) ... 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 >>> fibo(40) 102334155 >>> fibo(50) 12586269025 >>> fibo(60) 1548008755920
リスト : 数値積分 (中点則で円周率を求める) import numpy as np n = 100 for _ in range(5): w = 1 / n a = (np.arange(1, n + 1) - 0.5) * w b = 4.0 / (1.0 + a * a) print(n, np.sum(b) * w) n *= 10
$ python3 sample01.py 100 3.1416009869231245 1000 3.1415927369231267 10000 3.1415926544231265 100000 3.1415926535981273 1000000 3.1415926535898775
A.astype(type), 配列 A の要素のデータ型を type に変更した新しい配列を返す A.reshape(shape), 配列 A の形状を shape に変更した View を返す (値はコピーされない) A.resize(shape), 配列 A の形状を shape に変更する (破壊的な修正) A.flatten(), A.flat, 配列 A の平坦化
>>> a = np.arange(1, 10) >>> a array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = a.reshape((3, 3)) >>> b array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> b[0, 0] += 10 >>> a array([11, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b array([[11, 2, 3], [ 4, 5, 6], [ 7, 8, 9]]) >>> a[8] += 20 >>> a array([11, 2, 3, 4, 5, 6, 7, 8, 29]) >>> b array([[11, 2, 3], [ 4, 5, 6], [ 7, 8, 29]]) >>> c = np.arange(1, 10) >>> c array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> c.resize((3, 3)) >>> c array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> d = c.flatten() >>> d array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> c array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> d[0] = 10 >>> d array([10, 2, 3, 4, 5, 6, 7, 8, 9]) >>> c array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> d array([10, 2, 3, 4, 5, 6, 7, 8, 9]) >>> e = d.astype(np.float_) >>> e array([10., 2., 3., 4., 5., 6., 7., 8., 9.])
>>> a = np.arange(1, 10) >>> a array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> a.shape = 3, 3 >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a.shape = 9 >>> a array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> a.shape = 3,-1 >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> b = np.arange(1, 9) >>> b array([1, 2, 3, 4, 5, 6, 7, 8]) >>> b.shape = 2, 4 >>> b array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> b.shape = 2, 2, -1 >>> b array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
>>> a = np.array([1,2,3]) >>> a array([1, 2, 3]) >>> a.shape (3,) >>> b = a[np.newaxis, :] >>> b array([[1, 2, 3]]) >>> b.shape (1, 3) >>> c = a[:, np.newaxis] >>> c array([[1], [2], [3]]) >>> c.shape (3, 1) >>> d = np.arange(8).reshape(2,2,2) >>> d array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) >>> d[..., 0] array([[0, 2], [4, 6]]) >>> d[1, ...] array([[4, 5], [6, 7]])
>>> a = np.array([9, 8, 7, 6, 5, 4, 3, 2, 1]) >>> a array([9, 8, 7, 6, 5, 4, 3, 2, 1]) >>> a[[5, 1, 3]] array([4, 8, 6]) >>> b = a.reshape(3, 3) >>> b array([[9, 8, 7], [6, 5, 4], [3, 2, 1]]) >>> b[([0, 1, 2], [2, 1, 0])] array([7, 5, 3]) >>> b[[0, 1, 2], [2, 1, 0]] array([7, 5, 3])
>>> x = a % 2 == 0 >>> x array([False, True, False, True, False, True, False, True, False]) >>> a[x] array([8, 6, 4, 2]) >>> y = b > 4 >>> y array([[ True, True, True], [ True, True, False], [False, False, False]]) >>> b[y] array([9, 8, 7, 6, 5]) >>> b[b % 2 != 0] array([9, 7, 5, 3, 1]) >>> c = np.arange(9).reshape((3, 3)) >>> c array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> c[c % 2 == 0] = 0 >>> c array([[0, 1, 0], [3, 0, 5], [0, 7, 0]])
リスト : 素数 (prime.py) import numpy as np import time # Python のリストを使用する def prime(n): ps = [2] xs = list(range(3, n + 1, 2)) while True: p = xs[0] if p * p > n: return ps + xs ps.append(p) xs = list(filter(lambda x: x % p != 0, xs)) # NumPy バージョン def prime_np(n): ps = [2] xs = np.arange(3, n + 1, 2) while True: p = xs[0] if p * p > n: return ps + list(xs) ps.append(p) xs = xs[xs % p != 0] s = time.time() print(len(prime(1000000))) print(time.time() - s) s = time.time() print(len(prime_np(1000000))) print(time.time() - s)
$ python3 prime.py 78498 2.0037577152252197 78498 0.2534444332122803
>>> a = np.arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.square(a) array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81]) >>> np.sqrt(a) array([0. , 1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]) >>> b = np.linspace(0, np.pi/2, 7) >>> b array([0. , 0.26179939, 0.52359878, 0.78539816, 1.04719755, 1.30899694, 1.57079633]) >>> np.sin(b) array([0. , 0.25881905, 0.5 , 0.70710678, 0.8660254 , 0.96592583, 1. ])
frompyfunc(関数, 引数の個数, 返り値の個数) => ufunc
リスト : frompyfunc() の簡単な使用例 (sample02.py) import time, math import numpy as np def mysqrt(n): return math.sqrt(n) ufunc_mysqrt = np.frompyfunc(mysqrt, 1, 1) s = time.time() np.sqrt(np.arange(10000000)) print(time.time() - s) s = time.time() ufunc_mysqrt(np.arange(10000000)) print(time.time() - s)
$ python3 sample02.py 0.3668520450592041 2.2412054538726807
ufunc.reduce(A, axis=0) ufunc.accumulate(A, axis=0)
>>> a = np.arange(1, 10) >>> a array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.add.reduce(a) 45 >>> np.add.accumulate(a) array([ 1, 3, 6, 10, 15, 21, 28, 36, 45]) >>> np.multiply.reduce(a) 362880 >>> np.multiply.accumulate(a) array([ 1, 2, 6, 24, 120, 720, 5040, 40320, 362880])
>>> b = np.arange(1, 26).reshape((5, 5)) >>> b array([[ 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25]]) >>> np.add.reduce(b, axis=0) array([55, 60, 65, 70, 75]) >>> np.add.reduce(b, axis=1) array([ 15, 40, 65, 90, 115])
>>> c = np.arange(1, 28).reshape((3, 3, 3)) >>> c array([[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]], [[19, 20, 21], [22, 23, 24], [25, 26, 27]]]) >>> np.add.reduce(c, axis=0) array([[30, 33, 36], [39, 42, 45], [48, 51, 54]]) >>> c[0,...] + c[1,...] + c[2,...] array([[30, 33, 36], [39, 42, 45], [48, 51, 54]]) >>> np.add.reduce(c, axis=2) array([[ 6, 15, 24], [33, 42, 51], [60, 69, 78]]) >>> c[...,0] + c[...,1] + c[...,2] array([[ 6, 15, 24], [33, 42, 51], [60, 69, 78]])
>>> a = np.array([0, 1, 2, 4, 3, 4, 2, 1, 0]) >>> a array([0, 1, 2, 4, 3, 4, 2, 1, 0]) >>> a.argmin() 0 >>> a.argmax() 3 >>> b = a.reshape((3,3)) >>> b array([[0, 1, 2], [4, 3, 4], [2, 1, 0]]) >>> b.argmin(axis=0) array([0, 0, 2]) >>> b.argmin(axis=1) array([0, 1, 2]) >>> b.argmax(axis=0) array([1, 1, 1]) >>> b.argmax(axis=1) array([2, 0, 0]) >>> a.nonzero() (array([1, 2, 3, 4, 5, 6, 7]),) >>> b.nonzero() (array([0, 0, 1, 1, 1, 2, 2]), array([1, 2, 0, 1, 2, 0, 1])) >>> np.where(a % 2 == 0) (array([0, 2, 3, 5, 6, 8]),) >>> np.where(b % 2 == 1) (array([0, 1, 2]), array([1, 1, 1])) >>> c = np.where(b % 2 == 1,b,b+ 1) >>> c array([[1, 1, 3], [5, 3, 5], [3, 1, 1]]) >>> np.all(a) False >>> np.any(a) True >>> np.any(np.array([0, 0, 0, 0, 0])) False >>> np.all(b) False >>> np.all(b, axis=0) array([False, True, False]) >>> np.all(c) True >>> np.all(c, axis=0) array([ True, True, True])
リスト : エラトステネスの篩 (sieve.py) import numpy as np import time # Python のリストを使用 def sieve(n): ps = [True] * (n + 1) ps[0] = False ps[1] = False for i in range(2 + 2, n + 1, 2): ps[i] = False x = 3 while x * x <= n: if ps[x]: for i in range(x + x, n + 1, x): ps[i] = False x += 2 for i in range(2, n + 1): if ps[i]: yield i # NumPy バージョン def sieve_np(n): ps = np.ones(n + 1, 'u1') ps[0] = 0 ps[1] = 0 ps[2+2::2] = 0 x = 3 while x * x <= n: if ps[x]: ps[x + x::x] = 0 x += 2 return np.where(ps == 1)[0] s = time.time() print(len(list(sieve(10000000)))) print(time.time() - s) print(sieve_np(100)) s = time.time() print(len(sieve_np(10000000))) print(time.time() - s)
$ python3 sieve.py 664579 1.932060956954956 [ 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97] 664579 0.1401655673980713
リスト : ナンバープレースの解法 (numplace.py) import numpy as np # 問題 (出典: 数独 - Wikipedia の問題例) sudoku_board = np.array([ [5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9] ]) # 条件のチェック def check_number(x, y, n, board): if np.any(board[x, :] == n) or np.any(board[:, y] == n): return False x1 = (x // 3) * 3 y1 = (y // 3) * 3 if np.any(board[x1:x1+3, y1:y1+3] == n): return False return True # 深さ優先探索による解法 def numplace(x, y, board): if y >= 9: print(board) elif x >= 9: numplace(0, y + 1, board) elif board[x, y]: numplace(x + 1, y, board) else: for n in range(1, 10): if not check_number(x, y, n, board): continue board[x, y] = n numplace(x + 1, y, board) board[x, y] = 0 print(sudoku_board) print('----------') numplace(0, 0, sudoku_board)
$ python3 numplace.py [[5 3 0 0 7 0 0 0 0] [6 0 0 1 9 5 0 0 0] [0 9 8 0 0 0 0 6 0] [8 0 0 0 6 0 0 0 3] [4 0 0 8 0 3 0 0 1] [7 0 0 0 2 0 0 0 6] [0 6 0 0 0 0 2 8 0] [0 0 0 4 1 9 0 0 5] [0 0 0 0 8 0 0 7 9]] ---------- [[5 3 4 6 7 8 9 1 2] [6 7 2 1 9 5 3 4 8] [1 9 8 3 4 2 5 6 7] [8 5 9 7 6 1 4 2 3] [4 2 6 8 5 3 7 9 1] [7 1 3 9 2 4 8 5 6] [9 6 1 5 3 7 2 8 4] [2 8 7 4 1 9 6 3 5] [3 4 5 2 8 6 1 7 9]]
>>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a.sum() 45 >>> np.sum(a) 45 >>> np.sum(a, axis=0) array([12, 15, 18]) >>> np.sum(a, axis=1) array([ 6, 15, 24]) >>> np.min(a, axis=1) array([1, 4, 7]) >>> np.max(a, axis=1) array([3, 6, 9])
リスト : 統計処理の簡単な例 (sample03.py) import numpy as np import matplotlib.pyplot as plt # 身長のデータ height = [ 148.7, 149.5, 133.7, 157.9, 154.2, 147.8, 154.6, 159.1, 148.2, 153.1, 138.2, 138.7, 143.5, 153.2, 150.2, 157.3, 145.1, 157.2, 152.3, 148.3, 152.0, 146.0, 151.5, 139.4, 158.8, 147.6, 144.0, 145.8, 155.4, 155.5, 153.6, 138.5, 147.1, 149.6, 160.9, 148.9, 157.5, 155.1, 138.9, 153.0, 153.9, 150.9, 144.4, 160.3, 153.4, 163.0, 150.9, 153.3, 146.6, 153.3, 152.3, 153.3, 142.8, 149.0, 149.4, 156.5, 141.7, 146.2, 151.0, 156.5, 150.8, 141.0, 149.0, 163.2, 144.1, 147.1, 167.9, 155.3, 142.9, 148.7, 164.8, 154.1, 150.4, 154.2, 161.4, 155.0, 146.8, 154.2, 152.7, 149.7, 151.5, 154.5, 156.8, 150.3, 143.2, 149.5, 145.6, 140.4, 136.5, 146.9, 158.9, 144.4, 148.1, 155.5, 152.4, 153.3, 142.3, 155.3, 153.1, 152.3 ] h = np.array(height) print('sum = {}, max = {}, min = {}'.format(h.sum(), h.max(), h.min())) print('mean = {}, var = {}, std = {}'.format(h.mean(), h.var(), h.std())) print(np.histogram(h, bins=np.arange(130, 171, 5))) print(plt.hist(h, bins=np.arange(130, 171, 5))) # plt.savefig("hist.png", dpi=50) plt.show()
$ python3 sample03.py sum = 15062.699999999999, max = 167.9, min = 133.7 mean = 150.62699999999998, var = 41.389571000000025, std = 6.433472701426503 (array([ 1, 6, 12, 25, 32, 17, 6, 1]), array([130, 135, 140, 145, 150, 155, 160, 165, 170])) (array([ 1., 6., 12., 25., 32., 17., 6., 1.]), array([130., 135., 140., 145., 150., 155., 160., 165., 170.]), <BarContainer object of 8 artists>)
リスト : 東京の年平均気温 (sample04.py) import numpy as np import matplotlib.pyplot as plt # 平均気温 (1975 - 2014) data = np.array([ 15.6, 15.0, 15.8, 16.1, 16.9, 15.4, 15.0, 16.0, 15.7, 14.9, 15.7, 15.2, 16.3, 15.4, 16.4, 17.0, 16.4, 16.0, 15.5, 16.9, 16.3, 15.8, 16.7, 16.7, 17.0, 16.9, 16.5, 16.7, 16.0, 17.3, 16.2, 16.4, 17.0, 16.4, 16.7, 16.9, 16.5, 16.3, 17.1, 16.6 ]) x = np.arange(1975, 2015) # 散布図 plt.plot(x, data, 'o') # 相関係数 print(np.corrcoef(x, data)) # 回帰直線 a, b = np.polyfit(x, data, 1) print(a, b) plt.plot(x, x * a + b) # plt.savefig('tokyo.png', dpi=50) plt.show()
$ python3 sample04.py [[1. 0.62750348] [0.62750348 1. ]] 0.03442776735459678 -52.43618198874326
>>> np.random.rand() 0.047653528033401504 >>> np.random.rand(10) array([0.7378687 , 0.24128895, 0.70803174, 0.70097538, 0.39710067, 0.18238028, 0.7943424 , 0.12147911, 0.51665823, 0.68891523]) >>> np.random.randn() -0.3073797959407569 >>> np.random.randn(10) array([ 0.79187796, 0.00350009, -0.01247469, -0.59927661, -0.35585297, 0.81813222, -0.09386419, -1.58999999, -1.43327989, -2.98426565]) >>> np.random.randint(0, 10) 7 >>> np.random.randint(0, 10, 20) array([8, 9, 2, 5, 7, 9, 9, 9, 0, 1, 4, 4, 7, 2, 0, 4, 3, 9, 2, 9]) >>> np.random.randint(0, 10, (5, 5)) array([[0, 7, 7, 4, 3], [6, 0, 3, 1, 5], [6, 1, 0, 8, 4], [3, 2, 3, 9, 7], [7, 4, 1, 5, 9]])
リスト : 一様分布 (sample05.py) import numpy as np import matplotlib.pyplot as plt a = np.random.rand(100000) plt.hist(a, bins=50) # plt.savefig('rand.png', dpi=50) plt.show()
リスト : 正規分布 (sample06.py) import numpy as np import matplotlib.pyplot as plt a = np.random.randn(100000) plt.hist(a, bins=50) # plt.savefig('randn.png', dpi=50) plt.show()
リスト : モンテカルロ法で円周率を求める (sample07.py) import numpy as np n = 1000000 x, y = np.random.rand(2, n) c = x ** 2 + y ** 2 <= 1 print(len(x[c]) / n * 4.0)
$ python3 sample07.py 3.141752
>>> a = ['foo', 'bar', 'baz', 'oops'] >>> a ['foo', 'bar', 'baz', 'oops'] >>> np.random.choice(a) 'oops' >>> np.random.choice(a) 'oops' >>> np.random.choice(a) 'foo' >>> np.random.choice(a, 2) array(['bar', 'foo'], dtype='<U4') >>> np.random.choice(a, 2) array(['oops', 'foo'], dtype='<U4') >>> np.random.choice(a, p=[1/2, 1/6, 1/6, 1/6]) 'foo' >>> np.random.choice(a, p=[1/2, 1/6, 1/6, 1/6]) 'oops' >>> np.random.choice(a, p=[1/2, 1/6, 1/6, 1/6]) 'foo' >>> np.random.choice(a, p=[1/2, 1/6, 1/6, 1/6]) 'foo' >>> np.random.choice(a, p=[1/2, 1/6, 1/6, 1/6]) 'baz' >>> b = np.arange(10) >>> b array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.random.shuffle(b) >>> b array([0, 2, 8, 5, 7, 1, 4, 6, 3, 9]) >>> np.random.shuffle(b) >>> b array([7, 8, 6, 1, 4, 9, 0, 3, 2, 5]) >>> np.random.seed(0) >>> np.random.rand(10) array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 , 0.64589411, 0.43758721, 0.891773 , 0.96366276, 0.38344152]) >>> np.random.seed(0) >>> np.random.rand(10) array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 , 0.64589411, 0.43758721, 0.891773 , 0.96366276, 0.38344152])