【NumPy入門】配列を作成する方法!array・arange・linspaceなどを解説

Python

こんにちは、ぼりたそです!

今回はPythonの数値計算ライブラリであるNumPyを使って配列を作成する方法について解説します。

NumPyでは、リストから配列を作成するだけでなく、連続した数値を並べたり、指定した値で埋めた配列を作成したりできます。

これらの操作は、データ分析や機械学習でデータを扱う際の基本となりますので、ぜひ覚えておきおきたいですね。

この記事では、以下のポイントを解説します。

Point
  • np.array():リストから配列を作成する
  • np.arange():一定間隔の配列を作成する
  • np.linspace():指定した要素数の配列を作成する
  • np.zeros()、np.ones():0や1で埋めた配列を作成する
  • np.full():指定した値で埋めた配列を作成する

それでは順番に確認していきましょう!

NumPyの配列とは?

NumPyは、Pythonで数値計算を効率的に行うためのライブラリです。

NumPyで扱う基本的なデータ構造はndarray(多次元配列)と呼ばれ、複数の数値をまとめて保持・計算できます。

例えば、Pythonのリストでは各要素を2倍するために繰り返し処理を使用することがありますが、NumPyでは配列全体に数値を掛けるだけで、各要素をまとめて計算できます。

NumPyを使用するには、最初にライブラリを読み込みます。

import numpy as np

以降のコードは、この読み込みを実行した状態を前提とします。

np.array():リストから配列を作成する

NumPyで配列を作成する最も基本的な方法が、np.array()です。

Pythonのリストを引数に渡すことで、その内容を持つNumPy配列を作成できます。

import numpy as np

values = np.array([10, 20, 30, 40])
print(values)

# 実行結果:
# [10 20 30 40]

NumPyの配列は、リストとは異なり、表示した際に要素間のカンマがありません。

2次元配列を作成する

NumPyでは、1次元配列だけでなく、行と列を持つ2次元配列も作成できます。

例えば、次のコードでは2行3列の配列を作成しています。

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

print(values)
print(values.shape)

# 実行結果:
# [[10 20 30]
#  [40 50 60]]
# (2, 3)

shapeは配列の形状を表す属性です。

実行結果の(2, 3)は、2行3列の配列であることを意味しています。

データ分析や機械学習では、行をサンプル、列を特徴量として2次元配列を扱うことが多いため、配列の形状を確認する操作は重要です。

np.arange():一定間隔の配列を作成する

np.arange()は、指定した範囲の数値を一定間隔で並べた配列を作成する関数です。

基本的な書き方は次のとおりです。

np.arange(開始値, 終了値, 刻み幅)

例えば、0から10までの数値を2ずつ増やした配列を作成してみましょう。

values = np.arange(0, 11, 2)
print(values)

# 実行結果:
# [ 0  2  4  6  8 10]

ここで注意したいのは、終了値は配列に含まれないという点です。

今回の例では、10までの値を含めるために終了値を11と指定しています。

また、刻み幅を省略した場合は1となり、開始値を省略した場合は0から配列が作成されます。

print(np.arange(5))
print(np.arange(2, 6))

# 実行結果:
# [0 1 2 3 4]
# [2 3 4 5]

このように、np.arange()は連続した数値や一定間隔の数値を作成したい場合に便利です。

np.linspace():指定した要素数の配列を作成する

np.linspace()は、開始値と終了値の間を等間隔に分割して、指定した個数の値を持つ配列を作成する関数です。

基本的な書き方は次のとおりです。

np.linspace(開始値, 終了値, num=要素数)

例えば、0から1までの間に5つの数値を等間隔で並べてみましょう。

values = np.linspace(0, 1, num=5)
print(values)

# 実行結果:
# [0.   0.25 0.5  0.75 1.  ]

np.linspace()では、標準の設定で開始値と終了値の両方が含まれます。

今回の例では、0から1までの範囲を4つの区間に分割し、両端を含む5つの値を作成しています。

arangeとlinspaceの違い

np.arange()とnp.linspace()は、どちらも規則的な数値の配列を作成しますが、指定する内容が異なります。

関数指定する内容終了値
np.arange()刻み幅含まない
np.linspace()要素数標準で含む

例えば、0から10までの数値を5つの区間に分割したい場合は、次のように記述できます。

a = np.arange(0, 11, 2)
b = np.linspace(0, 10, num=6)

print(a)
print(b)

# 実行結果:
# [ 0  2  4  6  8 10]
# [ 0.  2.  4.  6.  8. 10.]

どちらも0から10までの6個の値が得られますが、np.linspace()では浮動小数点数として配列が作成されています。

また、小数を刻み幅に指定する場合、浮動小数点数の丸め誤差によってnp.arange()の結果が意図と異なることがあります。

必要な刻み幅が決まっている場合はnp.arange()、必要な要素数が決まっている場合はnp.linspace()を使うとよいでしょう。

np.zeros()・np.ones():0や1で埋めた配列を作成する

次に、すべての要素が0または1となる配列を作成してみましょう。

np.zeros()は0、np.ones()は1で埋めた配列を作成する関数です。

例えば、要素数が4の1次元配列は次のように作成できます。

zeros = np.zeros(4)
ones = np.ones(4)

print(zeros)
print(ones)

# 実行結果:
# [0. 0. 0. 0.]
# [1. 1. 1. 1.]

また、2次元配列を作成する場合は、行数と列数をタプルで指定します。

values = np.zeros((2, 3))
print(values)

# 実行結果:
# [[0. 0. 0.]
#  [0. 0. 0.]]

(2, 3)と指定することで、2行3列の配列が作成されています。

なお、np.zeros()とnp.ones()では、データ型を指定しなければ標準でfloat64となります。

整数型の配列を作成したい場合は、次のようにdtypeを指定します。

values = np.zeros((2, 3), dtype=np.int64)

print(values)
print(values.dtype)

# 実行結果:
# [[0 0 0]
#  [0 0 0]]
# int64

dtypeは配列の各要素が持つデータ型を指定する引数です。

np.full():指定した値で埋めた配列を作成する

最後に紹介するのがnp.full()です。

np.full()は、指定した形状の配列を、任意の値で埋めて作成する関数です。

np.full(形状, 値)

例えば、すべての要素が5となる2行3列の配列を作成してみましょう。

values = np.full((2, 3), 5)
print(values)

# 実行結果:
# [[5 5 5]
#  [5 5 5]]

また、小数を指定することもできます。

values = np.full((2, 3), 2.5)
print(values)

# 実行結果:
# [[2.5 2.5 2.5]
#  [2.5 2.5 2.5]]

このような操作は、データの初期値を設定するときなどに便利です。

さらに、既存の配列と同じ形状で新しい配列を作成することもできます。

scores = np.array([
    [70, 80, 90],
    [60, 75, 85]
])

initial = np.zeros(scores.shape)
print(initial)

# 実行結果:
# [[0. 0. 0.]
#  [0. 0. 0.]]

scores.shapeには(2, 3)が格納されているため、元の配列と同じ形状の配列が作成されます。

ただし、shapeを指定しただけでは元の配列のデータ型が引き継がれるわけではないので注意してください。

NumPyを基礎から学びたい方へ

今回はNumPyの配列を作成するための基本的な関数を紹介しました。

ただし、NumPyをデータ分析や機械学習で活用するためには、配列の作成だけでなく、データの取り出しや形状の変更、数値計算なども理解しておく必要があります。

そこで、NumPyの基本操作を体系的に学びたい方向けに、Kindle書籍『機械学習・データ分析のためのNumPy入門 ― 配列操作と数値計算の基本をPythonで学ぶ ―』を執筆しました。

本書では、今回紹介した配列の作成方法から、インデックス・スライス、条件抽出、集計、ブロードキャスト、データ分析に役立つ操作まで、コード例と演習問題を通じて学べる構成にしています。

「NumPyを使えるようになりたい」「Pythonによるデータ分析や機械学習の基礎を身につけたい」という方は、ぜひチェックしてみてください!

まとめ

今回は、NumPyで配列を作成する方法について解説しました。

今回紹介した関数をまとめると、次のようになります。

関数用途
np.array()リストなどから配列を作成
np.arange()刻み幅を指定して配列を作成
np.linspace()要素数を指定して等間隔の配列を作成
np.zeros()すべて0の配列を作成
np.ones()すべて1の配列を作成
np.full()指定した値で埋めた配列を作成

NumPyでは、配列の形状やデータ型を適切に指定することが、意図した計算結果を得るための重要なポイントとなります。

まずは今回紹介した関数を実際に動かして、作成される配列の違いを確認してみてください!

タイトルとURLをコピーしました