100 NumPy 練習問題(日本語訳)¶
このページは、Nicolas P. Rougier 氏による 100 numpy exercises の日本語訳です。第 4 回「データ操作の基礎 - NumPy」の補助教材として、自学自習用にご利用ください。
出典・ライセンス
- 原典: rougier/numpy-100
- 著作権: Copyright (c) 2016-2024 Nicolas P. Rougier
- ライセンス: MIT License
- 翻訳: 茨城大学「データ活用法」講義(非公式日本語訳)
- 翻訳方法: 本ページの日本語訳は AI(大規模言語モデル)を用いて作成しています。誤訳や不自然な表現が含まれる可能性があるため、疑問がある場合は原典を参照してください。
使い方¶
100 問の NumPy 練習問題が、基本操作から応用までおおむね難易度順に並んでいます。各問題には 「ヒント」 と 「解答」 のアコーディオンがあり、クリックすると展開できます。
- まず問題文だけを読んで、自分で書いてみる
- 詰まったらヒントを開いて、関数名や考え方を確認する
- 答え合わせに解答を開く
すべての問題に取り組む必要はありません。気になるものから挑戦してみてください。
1. NumPy パッケージを np という名前でインポートしてください ★☆☆¶
ヒント
import … as
2. NumPy のバージョンと設定情報を表示してください ★☆☆¶
ヒント
np.__version__、np.show_config()
3. サイズ 10 のゼロベクトル(要素がすべて 0)を作成してください ★☆☆¶
ヒント
np.zeros
4. 任意の配列のメモリサイズを調べる方法は? ★☆☆¶
ヒント
size、itemsize
解答
5. コマンドラインから NumPy の add 関数のドキュメントを取得する方法は? ★☆☆¶
ヒント
np.info
6. サイズ 10 のゼロベクトルを作成し、5 番目の要素だけ 1 にしてください ★☆☆¶
ヒント
array[4]
7. 10 以上 50 未満の値を持つベクトルを作成してください ★☆☆¶
ヒント
arange
8. ベクトルを逆順にしてください(最初の要素が最後になるように)★☆☆¶
ヒント
array[::-1]
9. 0 から 8 の値を持つ 3×3 の行列を作成してください ★☆☆¶
ヒント
reshape
10. [1, 2, 0, 0, 4, 0] から非ゼロ要素のインデックスを求めてください ★☆☆¶
ヒント
np.nonzero
11. 3×3 の単位行列を作成してください ★☆☆¶
ヒント
np.eye
12. ランダムな値を持つ 3×3×3 の配列を作成してください ★☆☆¶
ヒント
np.random.random
13. ランダムな値を持つ 10×10 の配列を作成し、最小値と最大値を求めてください ★☆☆¶
ヒント
min、max
14. サイズ 30 のランダムなベクトルを作成し、平均値を求めてください ★☆☆¶
ヒント
mean
15. 縁が 1、内側が 0 の 2 次元配列を作成してください ★☆☆¶
ヒント
array[1:-1, 1:-1]
16. 既存の配列の周囲に 0 で埋めた縁を追加する方法は? ★☆☆¶
ヒント
np.pad
解答
17. 次の式の結果は何になりますか? ★☆☆¶
ヒント
NaN = not a number(数ではない)、inf = infinity(無限大)
解答
18. 対角線のすぐ下に値 1, 2, 3, 4 を持つ 5×5 の行列を作成してください ★☆☆¶
ヒント
np.diag
19. 8×8 の行列を作成し、チェッカーボード(市松模様)のパターンで埋めてください ★☆☆¶
ヒント
array[::2]
20. 形状 (6, 7, 8) の配列があるとき、100 番目の要素のインデックス (x, y, z) は何になりますか? ★☆☆¶
ヒント
np.unravel_index
21. tile 関数を使って 8×8 のチェッカーボード行列を作成してください ★☆☆¶
ヒント
np.tile
22. 5×5 のランダム行列を正規化(標準化)してください ★☆☆¶
ヒント
(x - mean) / std
23. 4 つの符号なしバイト(RGBA)として色を表現するカスタム dtype を作成してください ★☆☆¶
ヒント
np.dtype
24. 5×3 の行列と 3×2 の行列の行列積を求めてください(通常の行列の積)★☆☆¶
ヒント
(ヒントなし)
解答
25. 1 次元配列に対し、3 より大きく 8 より小さい要素をその場で(in-place)負の値にしてください ★☆☆¶
ヒント
>、<
26. 次のスクリプトの出力は何になりますか? ★☆☆¶
ヒント
np.sum
27. 整数ベクトル Z を考えるとき、次の式のうち合法(エラーにならない)なのはどれですか? ★☆☆¶
ヒント
(ヒントなし)
28. 次の式の結果は何になりますか? ★☆☆¶
ヒント
(ヒントなし)
解答
29. 浮動小数点配列の値を「0 から離れる方向」に丸める方法は? ★☆☆¶
ヒント
np.uniform、np.copysign、np.ceil、np.abs、np.where
解答
30. 2 つの配列の共通の値を求める方法は? ★☆☆¶
ヒント
np.intersect1d
解答
31. NumPy の警告をすべて無視する方法は?(非推奨)★☆☆¶
ヒント
np.seterr、np.errstate
解答
32. 次の式は真ですか? ★☆☆¶
ヒント
虚数
33. 昨日・今日・明日の日付を取得する方法は? ★☆☆¶
ヒント
np.datetime64、np.timedelta64
解答
34. 2016 年 7 月のすべての日付を取得する方法は? ★★☆¶
ヒント
np.arange(dtype=datetime64['D'])
35. ((A + B) * (-A / 2)) をコピーなしで(in-place で)計算する方法は? ★★☆¶
ヒント
np.add(out=)、np.negative(out=)、np.multiply(out=)、np.divide(out=)
解答
36. 正の数からなるランダム配列の整数部分を、4 つの異なる方法で取り出してください ★★☆¶
ヒント
%、np.floor、astype、np.trunc
解答
37. 各行が 0〜4 の値を持つ 5×5 の行列を作成してください ★★☆¶
ヒント
np.arange
解答
38. 10 個の整数を生成するジェネレータ関数を考え、それを用いて配列を作成してください ★☆☆¶
ヒント
np.fromiter
解答
39. 0 と 1 の両方を除いた値を持つ、サイズ 10 のベクトルを作成してください ★★☆¶
ヒント
np.linspace
40. サイズ 10 のランダムベクトルを作成し、ソートしてください ★★☆¶
ヒント
sort
41. 小さい配列を np.sum より高速に合計する方法は? ★★☆¶
ヒント
np.add.reduce
42. 2 つのランダムな配列 A、B が等しいかどうかを確認してください ★★☆¶
ヒント
np.allclose、np.array_equal
解答
43. 配列を書き換え不可(読み取り専用)にしてください ★★☆¶
ヒント
flags.writeable
44. 直交座標を表すランダムな 10×2 行列を考え、それを極座標に変換してください ★★☆¶
ヒント
np.sqrt、np.arctan2
解答
45. サイズ 10 のランダムベクトルを作成し、最大値を 0 に置き換えてください ★★☆¶
ヒント
argmax
46. [0, 1] × [0, 1] の領域を覆う x と y 座標を持つ構造化配列を作成してください ★★☆¶
ヒント
np.meshgrid
解答
47. 2 つの配列 X と Y が与えられたとき、コーシー行列 C(Cij = 1 / (xi - yj))を構成してください ★★☆¶
ヒント
np.subtract.outer
解答
48. NumPy の各スカラ型について、表現可能な最小値と最大値を表示してください ★★☆¶
ヒント
np.iinfo、np.finfo、eps
解答
49. 配列のすべての値を省略せずに表示する方法は? ★★☆¶
ヒント
np.set_printoptions
50. ベクトル内で、与えられたスカラ値に最も近い値を見つける方法は? ★★☆¶
ヒント
argmin
解答
51. 位置 (x, y) と色 (r, g, b) を表す構造化配列を作成してください ★★☆¶
ヒント
dtype
解答
52. 形状 (100, 2) のランダムベクトル(座標)を考え、点と点の間の距離を求めてください ★★☆¶
ヒント
np.atleast_2d、T、np.sqrt
解答
53. 32 ビット浮動小数点配列を、32 ビット整数配列にその場で(in-place)変換する方法は? ★★☆¶
ヒント
view と [:] =
54. 次のようなファイルを読み込む方法は? ★★☆¶
ヒント
np.genfromtxt
解答
55. NumPy 配列に対する enumerate の等価物は? ★★☆¶
ヒント
np.ndenumerate、np.ndindex
解答
56. 一般的な 2 次元ガウス関数風の配列を生成してください ★★☆¶
ヒント
np.meshgrid、np.exp
解答
X, Y = np.meshgrid(np.linspace(-1, 1, 10), np.linspace(-1, 1, 10))
sigma, mu = 1.0, 0.0
G = np.exp(-((X - mu) ** 2 + (Y - mu) ** 2) / (2.0 * sigma**2))
print(G)
# 2 次元ガウスが分離可能であることを利用した別解
# Author: Nin17
x = np.linspace(-1, 1, 10)
y = np.linspace(-1, 1, 10)
gx = np.exp(-((x - mu) ** 2 / (2.0 * sigma**2)))
gy = np.exp(-((y - mu) ** 2 / (2.0 * sigma**2)))
G = gy[:, None] * gx[None, :]
print(G)
57. 2 次元配列に p 個の要素をランダムに配置する方法は? ★★☆¶
ヒント
np.put、np.random.choice
解答
58. 行列の各行から、その行の平均値を引いてください ★★☆¶
ヒント
mean(axis=, keepdims=)
解答
59. 配列を n 番目の列でソートする方法は? ★★☆¶
ヒント
argsort
60. 与えられた 2 次元配列に「ゼロのみの列」があるかを調べる方法は? ★★☆¶
ヒント
any、~
解答
61. 配列の中から、与えられた値に最も近い値を見つけてください ★★☆¶
ヒント
np.abs、argmin、flat
62. 形状 (1, 3) と (3, 1) の 2 つの配列を考え、イテレータを使ってその合計を計算する方法は? ★★☆¶
ヒント
np.nditer
解答
63. name 属性を持つ配列クラスを作成してください ★★☆¶
ヒント
クラスメソッド
解答
64. 与えられたベクトルに対し、別のベクトルのインデックスで指定された各要素に 1 を加える方法は?(重複インデックスに注意)★★★¶
ヒント
np.bincount または np.add.at
解答
65. インデックスリスト I に基づいて、ベクトル X の要素を配列 F に累積する方法は? ★★★¶
ヒント
np.bincount
解答
66. dtype が ubyte の (w, h, 3) 画像に対し、ユニークな色の数を計算してください ★★☆¶
ヒント
np.unique
解答
# Author: Fisher Wang
w, h = 256, 256
I = np.random.randint(0, 4, (h, w, 3)).astype(np.ubyte)
colors = np.unique(I.reshape(-1, 3), axis=0)
n = len(colors)
print(n)
# 高速版
# Author: Mark Setchell
# https://stackoverflow.com/a/59671950/2836621
w, h = 256, 256
I = np.random.randint(0, 4, (h, w, 3), dtype=np.uint8)
# 各ピクセルを 3 つの 8 ビットではなく、1 つの 24 ビット整数として扱う
I24 = np.dot(I.astype(np.uint32), [1, 256, 65536])
# ユニークな色を数える
n = len(np.unique(I24))
print(n)
67. 4 次元配列を考えるとき、最後の 2 軸の合計を一度に取る方法は? ★★★¶
ヒント
sum(axis=(-2, -1))
解答
68. 1 次元ベクトル D と同じサイズのベクトル S(サブセットのインデックス)が与えられたとき、D のサブセットごとの平均を計算する方法は? ★★★¶
ヒント
np.bincount
解答
69. 行列積の対角成分を取得する方法は? ★★★¶
ヒント
np.diag
解答
70. ベクトル [1, 2, 3, 4, 5] を考え、各値の間に 0 を 3 個ずつ挿入した新しいベクトルを作成してください ★★★¶
ヒント
array[::4]
解答
71. 次元 (5, 5, 3) の配列に、次元 (5, 5) の配列を乗ずる方法は? ★★★¶
ヒント
array[:, :, None]
72. 配列の 2 つの行を入れ替える方法は? ★★★¶
ヒント
array[[]] = array[[]]
73. 10 個の三角形(頂点を共有する)を表す 10 個の 3 つ組を考え、すべての三角形を構成するユニークな線分の集合を求めてください ★★★¶
ヒント
repeat、np.roll、np.sort、view、np.unique
解答
74. ソート済みの bincount 配列 C が与えられたとき、np.bincount(A) == C となる配列 A を作成する方法は? ★★★¶
ヒント
np.repeat
解答
75. 配列に対してスライディングウィンドウで平均を計算する方法は? ★★★¶
ヒント
np.cumsum、または from numpy.lib.stride_tricks import sliding_window_view(NumPy 1.20.0 以降)
解答
# Author: Jaime Fernández del Río
def moving_average(a, n=3):
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1:] / n
Z = np.arange(20)
print(moving_average(Z, n=3))
# Author: Jeff Luo (@Jeff1999)
# NumPy 1.20.0 以降が必要
from numpy.lib.stride_tricks import sliding_window_view
Z = np.arange(20)
print(sliding_window_view(Z, window_shape=3).mean(axis=-1))
76. 1 次元配列 Z を考え、最初の行が (Z[0], Z[1], Z[2])、各行が 1 ずつシフトする 2 次元配列を作成してください(最後の行は (Z[-3], Z[-2], Z[-1]))★★★¶
ヒント
from numpy.lib import stride_tricks、または from numpy.lib.stride_tricks import sliding_window_view(NumPy 1.20.0 以降)
解答
# Author: Joe Kington / Erik Rigtorp
from numpy.lib import stride_tricks
def rolling(a, window):
shape = (a.size - window + 1, window)
strides = (a.strides[0], a.strides[0])
return stride_tricks.as_strided(a, shape=shape, strides=strides)
Z = rolling(np.arange(10), 3)
print(Z)
# Author: Jeff Luo (@Jeff1999)
Z = np.arange(10)
print(sliding_window_view(Z, window_shape=3))
77. ブール値を否定したり、浮動小数点数の符号を in-place で反転する方法は? ★★★¶
ヒント
np.logical_not、np.negative
解答
78. 2 次元の直線を表す 2 つの点群 P0、P1 と点 p を考えるとき、p から各直線 i (P0[i], P1[i]) までの距離を計算する方法は? ★★★¶
ヒント
(ヒントなし)
解答
P0 = np.random.uniform(-10, 10, (10, 2))
P1 = np.random.uniform(-10, 10, (10, 2))
p = np.random.uniform(-10, 10, (1, 2))
def distance_faster(P0, P1, p):
# Author: Hemanth Pasupuleti
# Reference: https://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html
v = P1 - P0
v[:, [0, 1]] = v[:, [1, 0]]
v[:, 1] *= -1
norm = np.linalg.norm(v, axis=1)
r = P0 - p
d = np.abs(np.einsum("ij,ij->i", r, v)) / norm
return d
print(distance_faster(P0, P1, p))
##--------------- または ---------------##
def distance_slower(P0, P1, p):
T = P1 - P0
L = (T**2).sum(axis=1)
U = -((P0[:, 0] - p[..., 0]) * T[:, 0] + (P0[:, 1] - p[..., 1]) * T[:, 1]) / L
U = U.reshape(len(U), 1)
D = P0 + U * T - p
return np.sqrt((D**2).sum(axis=1))
print(distance_slower(P0, P1, p))
79. 2 次元直線を表す 2 つの点群 P0、P1 と、点群 P を考えるとき、各点 j (P[j]) から各直線 i (P0[i], P1[i]) までの距離を計算する方法は? ★★★¶
ヒント
(ヒントなし)
解答
# Author: Italmassov Kuanysh
# 前の問題の distance 関数を利用
P0 = np.random.uniform(-10, 10, (10, 2))
P1 = np.random.uniform(-10, 10, (10, 2))
p = np.random.uniform(-10, 10, (10, 2))
print(np.array([distance(P0, P1, p_i) for p_i in p]))
# Author: Yang Wu(ブロードキャストを使う方法)
def distance_points_to_lines(p: np.ndarray, p_1: np.ndarray, p_2: np.ndarray) -> np.ndarray:
x_0, y_0 = p.T # 形状 -> (n points, )
x_1, y_1 = p_1.T # 形状 -> (n lines, )
x_2, y_2 = p_2.T # 形状 -> (n lines, )
# p_1 -> p_2 への変位ベクトル
dx = x_2 - x_1 # 形状 -> (n lines, )
dy = y_2 - y_1 # 形状 -> (n lines, )
# 「外積」項
cross_term = x_2 * y_1 - y_2 * x_1 # 形状 -> (n lines, )
# x_0, y_0 (n points, 1) と dx, dy, cross_term (1, n lines) をブロードキャスト
numerator = np.abs(
dy[np.newaxis, :] * x_0[:, np.newaxis]
- dx[np.newaxis, :] * y_0[:, np.newaxis]
+ cross_term[np.newaxis, :]
)
denominator = np.sqrt(dx**2 + dy**2) # 形状 -> (n lines, )
# (n points, n lines) / (1, n lines) -> (n points, n lines)
return numerator / denominator[np.newaxis, :]
distance_points_to_lines(p, P0, P1)
80. 任意の配列を考え、指定した要素を中心とする固定形状の部分配列を取り出す関数を書いてください(必要に応じて fill 値でパディング)★★★¶
ヒント
minimum、maximum
解答
# Author: Nicolas Rougier
Z = np.random.randint(0, 10, (10, 10))
shape = (5, 5)
fill = 0
position = (1, 1)
R = np.ones(shape, dtype=Z.dtype) * fill
P = np.array(list(position)).astype(int)
Rs = np.array(list(R.shape)).astype(int)
Zs = np.array(list(Z.shape)).astype(int)
R_start = np.zeros((len(shape),)).astype(int)
R_stop = np.array(list(shape)).astype(int)
Z_start = (P - Rs // 2)
Z_stop = (P + Rs // 2) + Rs % 2
R_start = (R_start - np.minimum(Z_start, 0)).tolist()
Z_start = (np.maximum(Z_start, 0)).tolist()
R_stop = np.maximum(R_start, (R_stop - np.maximum(Z_stop - Zs, 0))).tolist()
Z_stop = (np.minimum(Z_stop, Zs)).tolist()
r = tuple([slice(start, stop) for start, stop in zip(R_start, R_stop)])
z = tuple([slice(start, stop) for start, stop in zip(Z_start, Z_stop)])
R[r] = Z[z]
print(Z)
print(R)
81. 配列 Z = [1, 2, ..., 14] から、R = [[1,2,3,4], [2,3,4,5], ..., [11,12,13,14]] のような配列を生成する方法は? ★★★¶
ヒント
stride_tricks.as_strided、または sliding_window_view(NumPy 1.20.0 以降)
解答
82. 行列のランクを計算してください ★★★¶
ヒント
np.linalg.svd、np.linalg.matrix_rank
解答
83. 配列の中で最も頻繁に現れる値を見つける方法は? ★★★¶
ヒント
np.bincount、argmax
84. 10×10 のランダム行列から、連続した 3×3 のブロックをすべて取り出してください ★★★¶
ヒント
stride_tricks.as_strided、または sliding_window_view(NumPy 1.20.0 以降)
解答
# Author: Chris Barker
Z = np.random.randint(0, 5, (10, 10))
n = 3
i = 1 + (Z.shape[0] - 3)
j = 1 + (Z.shape[1] - 3)
C = stride_tricks.as_strided(Z, shape=(i, j, n, n), strides=Z.strides + Z.strides)
print(C)
# Author: Jeff Luo (@Jeff1999)
Z = np.random.randint(0, 5, (10, 10))
print(sliding_window_view(Z, window_shape=(3, 3)))
85. Z[i, j] == Z[j, i] となる 2 次元配列サブクラスを作成してください ★★★¶
ヒント
クラスメソッド
解答
# Author: Eric O. Lebigot # 注: 2 次元配列で、インデックスによる値の代入のみ動作
class Symetric(np.ndarray):
def __setitem__(self, index, value):
i, j = index
super(Symetric, self).__setitem__((i, j), value)
super(Symetric, self).__setitem__((j, i), value)
def symetric(Z):
return np.asarray(Z + Z.T - np.diag(Z.diagonal())).view(Symetric)
S = symetric(np.random.randint(0, 10, (5, 5)))
S[2, 3] = 42
print(S)
86. 形状 (n, n) の行列 p 個と、形状 (n, 1) のベクトル p 個を考えるとき、p 個の行列積の和を一度に計算する方法は?(結果の形状は (n, 1))★★★¶
ヒント
np.tensordot
解答
87. 16×16 の配列を考えるとき、ブロックサイズ 4×4 のブロック単位の和を取得する方法は? ★★★¶
ヒント
np.add.reduceat、または sliding_window_view(NumPy 1.20.0 以降)
解答
# Author: Robert Kern
Z = np.ones((16, 16))
k = 4
S = np.add.reduceat(np.add.reduceat(Z, np.arange(0, Z.shape[0], k), axis=0),
np.arange(0, Z.shape[1], k), axis=1)
print(S)
# 別解
# Author: Sebastian Wallkötter (@FirefoxMetzger)
Z = np.ones((16, 16))
k = 4
windows = np.lib.stride_tricks.sliding_window_view(Z, (k, k))
S = windows[::k, ::k, ...].sum(axis=(-2, -1))
# さらに別解(by @Gattocrucco)
S = Z.reshape(4, 4, 4, 4).sum((1, 3))
88. NumPy 配列を使って「ライフゲーム」を実装する方法は? ★★★¶
ヒント
(ヒントなし)
解答
# Author: Nicolas Rougier
def iterate(Z):
# 隣接セル数を数える
N = (Z[0:-2, 0:-2] + Z[0:-2, 1:-1] + Z[0:-2, 2:] +
Z[1:-1, 0:-2] + Z[1:-1, 2:] +
Z[2: , 0:-2] + Z[2: , 1:-1] + Z[2: , 2:])
# ルールを適用
birth = (N == 3) & (Z[1:-1, 1:-1] == 0)
survive = ((N == 2) | (N == 3)) & (Z[1:-1, 1:-1] == 1)
Z[...] = 0
Z[1:-1, 1:-1][birth | survive] = 1
return Z
Z = np.random.randint(0, 2, (50, 50))
for i in range(100): Z = iterate(Z)
print(Z)
89. 配列の上位 n 個の値を取得する方法は? ★★★¶
ヒント
np.argsort または np.argpartition
解答
90. 任意個のベクトルが与えられたとき、直積(すべての要素の組み合わせ)を作成する方法は? ★★★¶
ヒント
np.indices
解答
# Author: Stefan Van der Walt
def cartesian(arrays):
arrays = [np.asarray(a) for a in arrays]
shape = (len(x) for x in arrays)
ix = np.indices(shape, dtype=int)
ix = ix.reshape(len(arrays), -1).T
for n, arr in enumerate(arrays):
ix[:, n] = arrays[n][ix[:, n]]
return ix
print(cartesian(([1, 2, 3], [4, 5], [6, 7])))
91. 通常の配列からレコード配列を作成する方法は? ★★★¶
ヒント
np.core.records.fromarrays
解答
92. 大きなベクトル Z を考えるとき、Z の 3 乗を 3 つの異なる方法で計算してください ★★★¶
ヒント
np.power、*、np.einsum
解答
93. 形状 (8, 3) の配列 A と形状 (2, 2) の配列 B を考えるとき、A の各行のうち、B の各行の要素(順不同)をすべて含む行を見つけてください ★★★¶
ヒント
np.where
解答
94. 10×3 の行列を考えるとき、要素がすべて等しくない行を抽出してください(例: [2, 2, 3])★★★¶
ヒント
(ヒントなし)
解答
95. 整数ベクトルを 2 進数表現の行列に変換してください ★★★¶
ヒント
np.unpackbits
解答
96. 2 次元配列から、ユニークな行を抽出する方法は? ★★★¶
ヒント
np.ascontiguousarray または np.unique
解答
97. 2 つのベクトル A、B を考え、np.inner、np.outer、np.sum、np.multiply と等価な計算を np.einsum で書いてください ★★★¶
ヒント
np.einsum
解答
98. 2 つのベクトル (X, Y) で表される経路を、等間隔のサンプル点でサンプリングする方法は? ★★★¶
ヒント
np.cumsum、np.interp
解答
# Author: Bas Swinckels
phi = np.arange(0, 10 * np.pi, 0.1)
a = 1
x = a * phi * np.cos(phi)
y = a * phi * np.sin(phi)
dr = (np.diff(x)**2 + np.diff(y)**2)**.5 # 区間の長さ
r = np.zeros_like(x)
r[1:] = np.cumsum(dr) # 経路を積分
r_int = np.linspace(0, r.max(), 200) # 等間隔の経路
x_int = np.interp(r_int, r, x)
y_int = np.interp(r_int, r, y)
99. 整数 n と 2 次元配列 X が与えられたとき、X の行のうち「自由度 n の多項分布からのサンプル」とみなせる行(整数のみを含み、合計が n になる行)を選んでください ★★★¶
ヒント
np.logical_and.reduce、np.mod
解答
100. 1 次元配列 X の平均値に対し、ブートストラップによる 95% 信頼区間を計算してください(配列の要素を復元抽出で N 回サンプリングし、各サンプルの平均を計算し、その平均のパーセンタイルを取る)★★★¶
ヒント
np.percentile
解答
以上で 100 問の NumPy 練習問題の日本語訳は完了です。お疲れさまでした!
さらに pandas の練習問題に取り組みたい場合は、100 pandas 練習問題 をご覧ください。