0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

土木のためのPython入門⑤ NumPy入門|配列・行列・数値計算を基礎から解説

0
Last updated at Posted at 2026-08-15

この記事では、土木工学を学ぶ学生を対象に、Pythonの数値計算ライブラリ NumPy の基本を解説します。

この記事では、

  • NumPyとndarray
  • 配列の基本操作
  • ブロードキャスト
  • ベクトル・行列
  • 連立方程式
  • NumPyとpandas・Matplotlibの関係
  • 生成AIを使ったNumPy学習

について扱います。

この記事を読む前に

  • 本記事は筆者個人の学習記録であり、所属する大学や特定の団体の公式見解ではありません。
  • 本記事の内容には十分注意を払っていますが、正確性や完全性を保証するものではありません。
  • 本記事を参考にする場合は、必ずご自身でも最新の公式情報等をご確認ください。
  • 本記事の利用によって生じたいかなる損害についても、筆者は責任を負いかねます。

今回のサンプルコードはGitHubにも公開しています。

また、Google Colabからコードを実行することもできます。


0. はじめに

前回は、Pythonでグラフを作成するための Matplotlib について学びました。
前回の記事はこちら

Matplotlibを使うと、河川水位や雨量、交通量などのデータをグラフとして可視化できます。

一方、土木工学ではグラフを作るだけでなく、

  • 行列計算
  • 連立方程式
  • 座標計算
  • 数値微分・数値積分
  • 構造解析
  • 水理計算
  • シミュレーション

など、大量の数値を扱うこともあります。

そこで登場するのが NumPy です。

NumPyは、Pythonで数値計算を行うための代表的なライブラリです。

今回は細かい関数を暗記するのではなく、

NumPyを使うと何ができるのか

を理解することを目標にします。


1. NumPyとは

NumPyは、Pythonで配列を使った数値計算を行うためのライブラリです。

一般的には、

import numpy as np

として利用します。

NumPyの中心となるのが ndarray という多次元配列です。

例えば河川水位を、

water_level = np.array([1.2, 1.5, 1.4, 2.1, 2.8])

のように表現できます。

print(type(water_level))
<class 'numpy.ndarray'>

このように、np.array() で作った配列は ndarray です。


2. NumPyは土木で何に使う?

NumPyは土木専用のライブラリではありませんが、土木工学で扱う数値データと相性がよいライブラリです。

例えば、

分野 利用例
構造 荷重・変位データ、剛性行列、連立方程式
水理 水位・流量、数値積分、数値微分
地盤 地盤データ、パラメータ計算
交通 交通量、時系列データ、シミュレーション
測量・GIS 座標、距離、標高データ

などに利用できます。

つまりNumPyは、

土木工学で扱う数値を計算するための基盤

として利用できます。


3. PythonのリストとNumPy配列

Pythonにはもともとリストがあります。

a = [1, 2, 3]
b = [4, 5, 6]

print(a + b)

結果は、

[1, 2, 3, 4, 5, 6]

です。

これは数値の足し算ではなく、リストの連結です。

一方、NumPyでは、

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print(a + b)
[5 7 9]

となります。

NumPyでは、配列の要素に対する計算をまとめて行えます。

例えば、

data = np.array([1, 2, 3, 4, 5])

print(data + 10)
print(data * 2)
print(data / 2)
[11 12 13 14 15]
[ 2  4  6  8 10]
[0.5 1.  1.5 2.  2.5]

このような配列演算がNumPyの基本です。


4. 土木データを計算する

河川水位を例にしてみます。

water_level = np.array([
    1.2,
    1.5,
    1.4,
    2.1,
    2.8
])

すべての水位に0.3 mを加える場合、

corrected_level = water_level + 0.3

print(corrected_level)

と書けます。

NumPyでは、このように配列全体へ一度に計算を適用できます。

最大値・最小値・平均値も簡単に求められます。

print("最大水位:", np.max(water_level))
print("最小水位:", np.min(water_level))
print("平均水位:", np.mean(water_level))

観測データの処理では、このような計算が頻繁に登場します。


5. ブロードキャスト

先ほど、

water_level + 0.3

という計算を行いました。

配列と1つの数値を計算できたのは、NumPyの ブロードキャスト(broadcasting) という仕組みによるものです。

例えば、

data = np.array([1, 2, 3])

print(data + 10)
[11 12 13]

となります。

イメージとしては、

[1, 2, 3] + [10, 10, 10]

のように考えると分かりやすいでしょう。

ただし、どのような形の配列でも計算できるわけではありません。

NumPyでは、

配列の値だけでなく、配列の形(shape)も意識する

ことが重要です。


6. 配列の形を確認する

NumPyでは、配列の構造を確認するために、

  • shape
  • ndim
  • size
  • dtype

などを利用します。

data = np.array([1, 2, 3, 4, 5])

print(data.shape)
print(data.ndim)
print(data.size)
print(data.dtype)

それぞれ、

属性 意味
shape 各次元の大きさ
ndim 次元数
size 要素数
dtype データ型

を表します。

例えば、

(5,)
1
5
int64

のようになります。

dtype は環境や作成方法によって異なる場合があります。


7. 2次元配列と行列

NumPyでは2次元以上の配列も扱えます。

data = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print(data)
print(data.shape)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

(3, 3)

(3, 3) は3行3列を意味します。

このような2次元配列は、数学で扱う行列を表現するためにも利用できます。

例えば、

$$
A=
\begin{pmatrix}
1 & 2\\
3 & 4
\end{pmatrix}
$$

は、

A = np.array([
    [1, 2],
    [3, 4]
])

と表せます。

np.matrix は使わない

古いPython・NumPyの資料では np.matrix が使われていることがあります。

しかし、現在のNumPyでは新しいコードに np.matrix を使用することは推奨されていません。

このシリーズでは、

np.array(...)

による2次元 ndarray を基本とします。


8. *@ の違い

行列計算では、*@ の違いに注意しましょう。

A = np.array([
    [1, 2],
    [3, 4]
])

B = np.array([
    [5, 6],
    [7, 8]
])

*要素ごとの掛け算です。

A * B
[[ 5 12]
 [21 32]]

一方、数学でいう行列積には @ を使います。

A @ B
[[19 22]
 [43 50]]

つまり、

A * B

→ 要素ごとの積

A @ B

→ 行列積

です。

行列計算では、この違いを必ず覚えておきましょう。


9. 連立方程式を解く

土木工学では、行列を使った連立方程式が頻繁に登場します。

例えば、

$$
\begin{aligned}
2x+y&=5
x+3y&=6
\end{aligned}
$$

を考えます。

行列形式では、

$$\begin{pmatrix}2&1\\1&3\end{pmatrix}\begin{pmatrix}x\\y\end{pmatrix}=\begin{pmatrix}5\\6\end{pmatrix}$$

となります。

NumPyでは、

A = np.array([
    [2, 1],
    [1, 3]
])

b = np.array([5, 6])

x = np.linalg.solve(A, b)

print(x)
[1.8 1.4]

となります。

したがって、

$$
x=1.8,\qquad y=1.4
$$

です。

np.linalg.solve() の注意点

np.linalg.solve() は、どんな連立方程式でも解けるわけではありません。

基本的には、係数行列 A正方行列かつフルランクである必要があります。

そのため、

「連立方程式だからとりあえず np.linalg.solve()

ではなく、まず数学的にどのような問題なのかを確認することが重要です。

例えば最小二乗法を行う場合には、np.linalg.lstsq() など別の方法を検討します。


10. NumPyのビューとコピー

NumPyでは、配列の一部を取り出したときの扱いにも注意が必要です。

data = np.array([10, 20, 30, 40, 50])

part = data[1:4]

print(part)
[20 30 40]

ここで、

part[0] = 999

とすると、

print(data)
[ 10 999  30  40  50]

となります。

これは、基本的なスライスによって得られた part が元の配列のビューになっているためです。

元の配列とは独立したデータとして扱いたい場合は、

part = data[1:4].copy()

とします。

NumPyを使うときは、

この配列は元のデータを共有しているのか?

という点を意識しておくと、意図しないデータ変更を防げます。


11. NumPyとpandas・Matplotlib

ここまで学んできたpandasやMatplotlibとNumPyは、組み合わせて使うことができます。

大まかには、

ライブラリ 主な役割
NumPy 数値配列・数値計算
pandas 表形式データの整理・分析
Matplotlib データの可視化

という関係です。

例えば、

CSV
 ↓
pandasで読み込む
 ↓
NumPyで計算
 ↓
Matplotlibで可視化

という流れでデータを処理できます。


12. NumPyとMatplotlibを組み合わせる

例えば、NumPyで $y=x^2$ を計算してMatplotlibで表示してみます。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = x ** 2

plt.plot(x, y)

plt.xlabel("x")
plt.ylabel("y")
plt.title("y = x²")

plt.grid()
plt.show()

ここでは、

np.linspace(0, 10, 100)

によって、0から10までの範囲を100個の点に分けています。

その x を使って、

$$
y=x^2
$$

を計算しています。

このように、

NumPy
 ↓
計算
 ↓
Matplotlib
 ↓
可視化

という組み合わせは、Pythonによるデータ分析でよく使われます。


13. NumPyの関数は全部覚える必要がある?

NumPyには非常に多くの関数があります。

例えば、

np.array()
np.zeros()
np.ones()
np.arange()
np.linspace()
np.mean()
np.max()
np.min()
np.sum()
np.sqrt()
np.exp()
np.log()
np.reshape()
np.concatenate()
np.linalg.solve()

などです。

しかし、これらをすべて暗記する必要はありません。

重要なのは、

何を計算したいか
        ↓
どのような数学的処理か
        ↓
どの機能を使えばよいか調べる
        ↓
コードを書く
        ↓
結果を確認する

という流れを身につけることです。

例えば、

「連立一次方程式を解きたい」

という問題に対して、

np.linalg.solve()

という関数があることを知っていれば、必要になったときに使い方を調べられます。

公式ドキュメントや検索、生成AIを利用して調べることも有効です。


14. 生成AIとNumPy

2026年現在、生成AIはPython学習やコード作成の補助として利用できます。

例えば、

NumPyを使って、河川水位の配列から
最大値、最小値、平均値を計算するコードを書いてください。

と指示すれば、コードの例を得られます。

ただし、

AIがコードを書けることと、そのコードが正しいことは別問題です。

特に土木工学では、

  • 配列の形
  • 数式
  • 単位
  • 前提条件
  • 計算方法
  • 結果の妥当性

を確認する必要があります。

例えば、コードが正常に実行できても、

m と mm
m³/s と L/s
度 と ラジアン

などを間違えていれば、結果は意味を持ちません。

そのため、

AIにコードを書かせる
        ↓
コードを読む
        ↓
実行する
        ↓
数式・単位・shapeを確認する
        ↓
結果の妥当性を確認する

という使い方を意識しましょう。

土木工学では、

「コードが動く」ことより「計算結果が工学的に正しい」ことが重要

です。


15. 今回学んだこと

今回はNumPyの基本を学びました。

重要なポイントは次の通りです。

  • NumPyはPythonの代表的な数値計算ライブラリ
  • ndarray がNumPyの基本的な配列
  • 配列に対してまとめて計算できる
  • ブロードキャストによって配列と単一の値などを計算できる
  • shape で配列の形を確認できる
  • ndim で次元数を確認できる
  • 2次元 ndarray で行列を表現できる
  • * は要素ごとの積、@ は行列積
  • np.linalg.solve() で連立一次方程式を解ける
  • NumPyのスライスではビューが返る場合がある
  • 必要に応じて .copy() を使う
  • pandasやMatplotlibと組み合わせて利用できる
  • NumPyの関数をすべて暗記する必要はない
  • 生成AIをコード作成の補助として利用できる
  • AIが生成したコードや結果を検証することが重要

16. 次回以降について

ここまでで、

Python
 ↓
pandas
 ↓
Matplotlib
 ↓
NumPy

というPythonによるデータ処理・可視化・数値計算の基本的な道具を学びました。

これらを組み合わせると、

データを読み込む
 ↓
pandasで整理する
 ↓
NumPyで計算する
 ↓
Matplotlibで可視化する
 ↓
結果を考察する

という流れでデータを扱えるようになります。

例えば河川データなら、

雨量データ
 ↓
pandasで読み込む
 ↓
NumPyで計算
 ↓
Matplotlibで可視化
 ↓
雨量と水位の関係を考察

という処理ができます。

さらにPythonを土木工学へ応用すると、

  • SciPy
  • 統計解析
  • 回帰分析
  • GIS
  • 機械学習
  • 深層学習
  • 数値解析
  • 有限要素法
  • PINN(Physics-Informed Neural Networks)

などにもつながっていきます。

Pythonそのものを目的にするのではなく、

土木工学の問題を理解し、Pythonを道具として使って解決する

ことを意識して学んでいきましょう。


まとめ

NumPyは、Pythonで数値計算や配列・行列を扱うための基本的なライブラリです。

最初からすべての関数を暗記する必要はありません。

まずは、

ndarray
shape
broadcasting
ベクトル・行列
@
np.linalg.solve()

といった基本的な考え方を理解しましょう。

そして、必要な機能を公式ドキュメントや検索、生成AIなどから調べて使えるようになることが重要です。

ただし、生成AIを利用する場合も、コードをそのまま信じるのではなく、

  • 何を計算しているのか
  • 数学的に正しいのか
  • 配列の形は適切か
  • 単位は正しいか
  • 結果は工学的に妥当か

を確認する習慣を身につけましょう。

Pythonを使って、土木工学の問題を自分で考え、計算し、結果を検証できるようになること。

これを目標にしていきましょう。

第6回の記事は下のリンクから

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?