
この回でつかむこと
配列の形と要素ごとの計算を説明できる。
NumPyで数をまとめるって何だろう?
NumPyのndarrayは、同じ種類の値を並べて計算するための道具です。shapeは配列の形を示します。1次元に3個なら(3,)、2行3列の表なら(2, 3)です。

りんご3個の重さに、それぞれ10gを足したいな。1個ずつ計算するの?

いい気づきだね。配列を使うと、並んだ数の一つひとつに同じ計算をまとめて適用できるんだよ。

形を確認してから計算すると、間違いを見つけやすそうです。

あおい へぇ、3個とも「もとの数+10」で答えが出るんだ!
配列に10を足すと、並んだ3つの値それぞれに10が加わる。 NumPyのndarrayは、同じ種類の値を並べて計算するための道具です。shapeは配列の形を示します。1次元に3個なら(3,)、2行3列の表なら(2, 3)です。
import numpy as np
weights = np.array([100, 120, 90])
print(weights.shape)
print(weights + 10)なぜそうなる? NumPyが10を各要素へ適用する仕組みをブロードキャストと呼びます。元のweights自体は変わりません。
2行3列の表に、3個の数を足そう
計算前の表は2行3列です。加える[10, 20, 30]は、横に並ぶ3列それぞれへ対応する3個の数です。どの数とどの数を足すか、結果を見る前に予想してみよう。
table = np.array([[1, 2, 3], [4, 5, 6]])
bonus = np.array([10, 20, 30])
print('元の表', table.shape)
print(table)
print('加える数', bonus.shape, bonus)
print('結果')
print(table + bonus)元の表 (2, 3) [[1 2 3] [4 5 6]] 加える数 (3,) [10 20 30] 結果 [[11 22 33] [14 25 36]]
ここに注目 結果は、元の表の各行に[10, 20, 30]を足した新しい表です。1行目は1+10、2+20、3+30。2行目は4+10、5+20、6+30になります。元のtableは変わりません。
元の表から、1マスずつ追ってみよう

へぇ、さっきの[[11, 22, 33], [14, 25, 36]]は、足したあとの答えなんだね。もとの表はどれ?

そうなんだよ。元の表は[[1, 2, 3], [4, 5, 6]]。横に並ぶ3個の数を、それぞれの行へ同じように足してみよう。

元の表は2行3列で、加える数は3個の1次元配列ですね。列の位置をそろえれば、計算を追えます。
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 10 | 20 | 30 |
| 11 | 22 | 33 |
| 14 | 25 | 36 |
1行目 1+10=11、2+20=22、3+30=33
2行目 4+10=14、5+20=25、6+30=36
「(2, 3)」は2行3列。一方「(3,)」は1次元に3個という意味で、1行1列ではありません。横に3個の数を各行へ対応させる計算を、ブロードキャストと呼びます。
table + 10:すべてのマスへ10を足すtable + [10, 20, 30]:列ごとに10、20、30を足すtable + [[10], [20]]:1行目へ10、2行目へ20を足す
横に2個の [10, 20] は、この表の横3列と位置が合わずエラーになります。ただし縦に2個並べた [[10], [20]] は計算できます。形が違えば必ずエラー、というわけではないんだよ。
予想して、理由を話そう
答えを選んで、説明を確かめよう。外れても発見が一つ増えるよ。
答えを選ぶと理由が表示されます。
Colabで試してみよう
コードの実行はColaboratoryの実行環境で行います。まずノートブックを保存し、Colabで「ファイル → ノートブックをアップロード」から開いてください。上から順に実行し、最後に値を変えてみましょう。
保存ボタンを押しても画面は切り替わりません。通常はブラウザの「ダウンロード」フォルダに .ipynb が保存されます。見つからない場合はダウンロード履歴を確認してください。Colabの実習は小さな例から始められます。
身近な技術とつなげてみよう

AI先生:画像も数の表なんだよ。白黒画像なら縦×横、カラー画像なら縦×横×色の3方向で考えられるよ。
この回の重要な用語
本文で出会った言葉を、ここで意味と一緒に振り返ろう。上の「ことばの窓」からも説明を開けるよ。
- ndarray
- N-dimensional arrayの略。NumPyで使う多次元配列です。
- shape
- 配列の形を示します。(2, 3)は2行3列、(3,)は1次元に数が3個です。(3,)を1行1列とは呼びません。
- ブロードキャスト
- 形の条件が合うとき、一方の数や数の並びを各行などに対応させ、要素ごとに計算する仕組みです。
- axis
- 集計する方向を指定する番号です。2次元配列ではaxis=0で列ごと、axis=1で行ごとに集計します。