【Python】ndarrayとは?初心者向けに使い方と実務での活用例をわかりやすく解説

はじめに

Pythonでデータを扱うときに、ndarray という専門用語を耳にすることがあるかもしれません。
これは、大量の数値データを効率よく操作するために利用される配列の一種です。
たとえば、行列計算や統計処理、画像処理など、さまざまなシーンで使われます。

とはいえ、初めて聞くと、どんな特徴があるのかイメージしづらいかもしれません。
しかし、心配しなくても大丈夫です。
ここでは、初心者の方でも分かるように、ndarrayの基礎から実際の使い方までを順番に説明します。

この記事を読むとわかること

  • ndarray がどのようなものか、その概念と特徴
  • ndarrayを作成する基本的なコード例
  • インデックスやスライスの使い方、形状の変更方法
  • 実務でどのような場面で活用できるか
  • Pythonのリスト(配列)との違いと使い分けのヒント

ndarray とは?

ndarrayとは、N次元配列を取り扱うためのPythonのデータ構造です。
データの配列を多次元で効率的に扱えるのが特長で、主に numpy というライブラリを通じて利用します。

たとえば、2次元配列は行列計算を直感的に書ける点で便利です。
さらに3次元以上のデータにも対応しているため、画像処理や時系列データの解析など幅広い分野で使われています。

どんなときに使うのか?

  • データ分析:統計情報を計算したり、機械学習に使うデータを前処理したりするとき
  • 画像処理:画像は色の情報が縦と横に並んでおり、さらにRGBなどの色成分があるので3次元配列として扱える
  • 数値シミュレーション:大量の数値を高速に演算したいとき

リスト(配列)と比べると演算が高速で、大規模なデータでもスムーズに処理できる利点があります。

ndarrayを使う準備

ndarrayを使うためには、numpy というライブラリを利用するのが一般的です。
もし手元の環境に入っていない場合は、環境に合わせて pip install numpy のような手順でインストールしてください。

numpyが準備できたら、Pythonのコードの先頭で import numpy as np と書くのが定番のやり方です。
これにより、numpynp という省略形で使うことができるようになります。

import numpy as np

# 簡単な例で試してみる
data = [1, 2, 3, 4, 5]
arr = np.array(data)

print(arr)
# 結果: [1 2 3 4 5]

このように、Pythonのリストを np.array() に渡すだけで簡単にndarrayを作れます。

ndarray の基本的な作成方法

実務でよく使われるndarrayの作成方法をいくつか紹介します。
どれも初心者でも覚えやすいコードばかりです。

リストから作る

すでに見たように、Pythonのリストをそのまま np.array() に渡します。
これが最もシンプルな方法です。

import numpy as np

list_data = [10, 20, 30]
ndarray_data = np.array(list_data)

print(ndarray_data)
# [10 20 30]

特定の数値で初期化する

すべての要素を同じ値にしたい場合に使います。
たとえば0で埋めるには np.zeros()、1で埋めるには np.ones() を使うことが多いです。

import numpy as np

zeros_arr = np.zeros((2, 3))  # 2行3列
ones_arr = np.ones((2, 3))    # 2行3列

print(zeros_arr)
# [[0. 0. 0.]
#  [0. 0. 0.]]

print(ones_arr)
# [[1. 1. 1.]
#  [1. 1. 1.]]

連番をつくる

特定の範囲で等間隔に並んだ数値をndarrayにしたいときは、 np.arange() が便利です。

import numpy as np

arr_range = np.arange(5, 11)  # 5から10まで
print(arr_range)
# [ 5  6  7  8  9 10]

また、 np.linspace() を使えば、小数点も含めた範囲を指定した区切り数で区切る方法がとれます。
これはグラフを書くときなどに便利です。

ndarray のデータ型

ndarrayは、一度作成すると基本的に全要素が同じデータ型になります。
たとえば整数型を格納すれば全要素が整数型、浮動小数点型を格納すれば全要素が浮動小数点型になります。

import numpy as np

arr_int = np.array([1, 2, 3], dtype=int)
arr_float = np.array([1, 2, 3], dtype=float)

print(arr_int.dtype)    # int64など
print(arr_float.dtype)  # float64など

こうした統一された型のおかげで、リストに比べて数値演算が高速になります。
また、あとで必要に応じて arr.astype(float) のように変換できます。

ndarray のインデックスとスライス

複数の要素を扱う上で重要になるのが、インデックス(要素番号)やスライス(ある範囲を取り出すこと)です。
Pythonのリストとほぼ同じ記法を使うので、難しくはありません。

1次元配列の場合

import numpy as np

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

# インデックスを指定して1つの要素を取り出す
print(arr[0])  # 10

# スライスして複数の要素を取り出す
print(arr[1:3])  # [20 30]

2次元配列の場合

行と列の二つのインデックスを使って要素を取り出します。

import numpy as np

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

print(matrix[0, 0])   # 行0列0 -> 1
print(matrix[1, 2])   # 行1列2 -> 6

# スライスで複数の行や列を指定できる
sub_matrix = matrix[0:2, 1:3]  # 上から2行、右から2列を取り出し
print(sub_matrix)
# [[2 3]
#  [5 6]]

2次元以上になっても基本の考え方は同じです。
必要な範囲を [start:end, start:end] のようにして取り出せます。

形状の変更(reshape)と結合

ndarrayの強みの一つが、 形状 (配列の次元構造) を柔軟に変えられる ことです。 データの並びを切り替えたり、結合したりできるため、実務でのデータ処理にも役立ちます。

形状の変更

既存の配列に対して reshape() メソッドを使うと、任意の形状に作り変えられます。

import numpy as np

arr = np.arange(1, 7)  # [1 2 3 4 5 6]
matrix_2d = arr.reshape((2, 3))
print(matrix_2d)
# [[1 2 3]
#  [4 5 6]]

ただし、要素数に矛盾がない形状である必要があります。

配列の結合

複数の配列を縦や横に結合したいケースがあります。
その場合は np.concatenate()np.vstack(), np.hstack() などを使います。

import numpy as np

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

# 縦方向に結合
vertical = np.vstack((a, b))
print(vertical)
# [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]

# 横方向に結合
horizontal = np.hstack((a, b))
print(horizontal)
# [[1 2 5 6]
#  [3 4 7 8]]

行列の行数や列数が食い違っている場合はエラーになるので、形状を確認しながら結合することが大切です。

ndarray とリスト(配列)との違い

Pythonにはリストという配列構造が標準で備わっていますが、ndarray はリストとは異なる特徴を持っています。

高速な数値演算

要素の型が統一されているため、内部的に高速な処理が可能

多次元対応が簡単

リストで多次元を表現しようとすると入れ子構造になるため、扱いにくい

豊富なメソッド

統計関数や配列操作に関するメソッドが充実している

一方で、リストは様々な型を混在させることが可能で、自由度が高いです。
状況に応じて使い分けるとよいでしょう。

ndarray を実務でどう活用するか

ndarrayは単なる配列というだけでなく、実務での活用シーンが幅広いです。
特にデータ処理や数値演算が多い場面では大きな助けになります。

データ分析・統計処理

売上データなどの表形式データを取り込んで、すばやく平均値や合計値を求めたいときに役立ちます。
複雑な演算でも1行のコードで書けるため、集計処理を効率化できます。

import numpy as np

sales = np.array([100, 200, 150, 250, 300])
average_sales = sales.mean()
print(average_sales)  # 平均値を出す

画像処理

画像データは縦・横のピクセルと色成分を含む3次元配列として扱えます。
例えば、画像をグレースケール変換したり、フィルターをかけたりする場合にもndarrayが使われます。
もちろん、詳細な処理には追加ライブラリが必要なケースもありますが、ndarrayの操作そのものは共通です。

シミュレーションや数値解析

科学技術計算や金融工学など、さまざまな分野で連立方程式を解いたり、行列演算をおこなったりするときにndarrayが重宝します。
リストのようにひとつひとつの要素を取り出して計算する手間が省けるため、大量のデータでもサクサク動かせるのがポイントです。

大規模データを取り扱う際は、必要な範囲だけを上手に切り出すのがコツです。
全体を無理やり処理しようとするとメモリ不足に陥る場合があります。

実務で意識したいポイント

ここからは、ndarrayを使う上で少し踏み込んだ観点を紹介します。
実務で大きなデータや複雑な演算を扱うときには、いくつか注意点もあるので見ていきましょう。

メモリのサイズ

多次元配列を大量に生成するとメモリを多く使います。
リストよりは効率的とはいえ、データが増えすぎるとパソコンが重くなることがあります。
また、同時に処理するデータ量が多い場合は、段階的に分けて処理したほうが安全です。

演算結果の予測

演算を間違えると配列の次元が想定外になることがあります。
とくに行列演算などでは、行列同士の形状が整合しないとエラーが発生します。
まずはデータの形状( shape プロパティ)を常に確認するようにするとよいでしょう。

import numpy as np

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

print(matrix_a.shape)  # (2, 2)
print(matrix_b.shape)  # (2, 2)

# 行列の積
result = np.dot(matrix_a, matrix_b)
print(result)
# [[19 22]
#  [43 50]]

デバッグのしやすさ

リストに慣れているとndarrayのエラーに戸惑うかもしれませんが、エラー文を読むと意外と原因がはっきり書かれています。
インデックス指定のミスや形状の不一致を指摘されるケースが多いので、都度エラー文をじっくり確認してみると良いです。

浮動小数点の演算を繰り返すと丸め誤差が発生することがあります。
厳密な計算が必要なときはデータ型やアルゴリズムをあらためて検討するのがおすすめです。

まとめ

ここまで、Pythonのndarrayについて基本的な使い方から実務での活用例までを紹介しました。
ndarrayは数値演算を効率化し、多次元のデータをわかりやすく扱える強力なツールです。
データ分析、画像処理、数値解析など、幅広い場面で利用されています。

リストとは異なり、要素の型を統一して大量のデータをスムーズに操作できるのが特長です。
これから大きなデータを扱う予定がある方や、機械学習や画像処理の分野に興味がある方は、ぜひndarrayを使ったプロジェクトに挑戦してみてください。

以上が、ndarrayの概要と基本的な使い方についての解説です。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。