Python
 Computer >> コンピューター >  >> プログラミング >> Python

NumPy配列入門:初心者向けやさしいガイド

リストとは、要素を順序立てて格納できるデータ型のことです。リストを使うと、複数の関連する値を1つの変数にまとめて保存できます。例えば、10足分の靴の名前を1つの変数に格納したり、店での買い物履歴を1つの変数に保存したりすることが可能です。

Pythonに標準で組み込まれているリストは強力なデータ型ですが、より高度な用途では物足りないと感じることもあるでしょう。そんなときに活躍するのが、NumPyの配列(array)データ型です。NumPyライブラリを使えば、多次元の配列も簡単に作成できます。

このガイドでは、NumPy配列とは何か、なぜ便利なのか、そしてコードの中でどのように扱うのかを解説します。それでは始めましょう!

NumPy配列とは?

NumPy配列とは、Pythonライブラリ「NumPy」で使われる配列オブジェクトのことです。NumPyは「Numerical Python(数値計算用Python)」の略で、科学技術計算や数学的処理によく使われるパッケージです。データ分析や高度な数学の処理を支援するさまざまなツールが付属しています。

素のPython(外部パッケージを使わないPython)の配列は強力ですが、処理速度が遅くなることがあります。一方、NumPy配列は、従来のPython配列よりも桁違いに高速であることを目指して設計されています。

この高速化は、NumPy配列が値をメモリ上の連続した領域に格納することで実現されています。これにより、Pythonがデータへのアクセスや操作を効率的に行えるようになります。

NumPy配列の宣言方法

まずは、NumPy配列を作成してみましょう。このチュートリアルでは、文字列の値を配列に格納します。格納するのは、とある地元のコーヒーショップで提供されているスイーツのリストです。最初にNumPyライブラリをインポートします。

import numpy as np

このコード行は、Pythonからnumpyをインポートし、そのライブラリにnpという名前を割り当てています。これにより、以降は配列を操作するときにnpを呼び出すだけで済みます。

次に、arrayインターフェースを使って配列を宣言します。

treats = np.array(["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"])
print(treats)

この配列には3つの文字列値が含まれています。従来のPythonのリストと同じように、すべての項目を角括弧で囲んでいます。NumPy配列を宣言するには、npに含まれるarrayメソッドを使用します。これにより、NumPyの組み込み配列型であるndarrayオブジェクトが生成されます。

このコードを実行すると、元の配列のコピーがNumPy配列として返されます。

['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread']

これで、自由に操作できる配列の完成です。

NumPy配列の次元

NumPyにおける「次元」とは、映画に出てくるような別世界のことではありません。配列における次元とは、その配列の中の深さのレベルを指します。「次元」という言葉は、ネストされた配列(配列の中に配列が入っている構造)を表す際に使われます。

配列は任意の次元数を持つことができます。実際に扱う配列のほとんどは、1次元(1-D)、2次元(2-D)、3次元(3-D)のいずれかです。「D」は次元を意味します。

NumPyの1次元配列(1-D)

最初の例で作成したのは1次元配列です。これは、0次元配列(つまり個々の要素)を要素として持つ配列のことです。日常的に扱う配列の多くは、この1次元配列です。

今度は、コーヒーショップのスイーツの価格を格納する配列を作成してみましょう。

import numpy as np

prices = np.array([1.95, 2.00, 2.05])
print(prices)

このコードを実行すると、値が1次元の配列として返されます:[1.95 2. 2.05]。

1次元配列の要素にアクセスするには、Pythonのリストと同じ構文が使えます。リストの2番目の項目を取得してみましょう。

print(prices[1])

このコードは、インデックス値1の項目、つまり「2.0」を返します。

Pythonの配列についてさらに詳しく知りたい方は、Python配列の初心者向けガイドもあわせてご覧ください。

NumPyの2次元配列(2-D)

すべての配列が1次元というわけではありません。例えば、2つの配列を含む配列を保存したいとしましょう。片方の配列にはコーヒーショップで販売しているスイーツのリストを、もう片方には販売しているコーヒーのリストを格納します。この2つを合わせたものが、menu_items配列になります。

NumPyでこの配列を作成してみましょう。

import numpy as np

menu_items = np.array([
	["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
	["Cappuccino", "Espresso", "Mocha"]
])

print(menu_items)

実行結果は以下の通りです。

[['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread']
 ['Cappuccino' 'Espresso' 'Mocha']]

新しく作成した配列は2次元です。配列の中の最初の配列にはスイーツのリストが、2番目の配列にはコーヒーのリストが格納されています。両方の配列が一組の角括弧で囲まれ、2つの配列がひとつの配列にまとめられている点に注目してください。

2次元配列からの要素の取り出し方は、Pythonの場合と少し異なります。2次元配列の要素にアクセスするには、取得したい値のインデックス番号をカンマで区切って指定する必要があります。

次のコードを見てみましょう。

print(menu_items[0, 2])

このコードは「Jammy Shortbread」を返します。これは、インデックス0の配列の中にある、インデックス2の項目を取得したということです。この場合、コーヒーショップで販売しているスイーツの配列の最後の項目を取り出したことになります。

NumPyの3次元配列(3-D)

ここでもう1つ次元を追加してみましょう。NumPy配列は、2次元配列を含む3次元配列を作ることもできます。

例えば、次のような値を保存したいとします。

  • 甘い食品と甘くない食品(ペアで、別々の配列に)
  • カフェイン入り飲料とカフェインなし飲料(ペアで、別々の配列に)

これらすべての値を1つの配列に格納します。この配列の次元構造は以下の通りです。

  • 1次元:すべてのメニュー項目
  • 2次元:甘い食品甘くない食品、カフェイン入りカフェインなしの飲料
  • 3次元:甘い食品、甘くない食品、カフェイン入り飲料、カフェインなし飲料

NumPyでこの配列を作成してみましょう。以下のコードをPythonファイルに貼り付けてください。

import numpy as np

menu_items = np.array([
	[
		["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
		["Smoked Bacon Roll", "Tuna Melt Panini", "Cheese and Tomato Toastie"]
	],
	[
		["Cappuccino", "Espresso", "Mocha"],
		["Apple Juice", "Water", "Orange Juice"]
	]
])

print(menu_items)

このコードは以下を返します。

[[['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread']
  ['Smoked Bacon Roll' 'Tuna Melt Panini' 'Cheese and Tomato Toastie']]

 [['Cappuccino' 'Espresso' 'Mocha']
  ['Apple Juice' 'Water' 'Orange Juice']]]

これで、先ほど説明したすべての情報を含む3次元配列が完成しました。この配列は、コーヒーショップが提供する全メニュー項目の包括的なリストになっています。

3次元配列からの要素へのアクセス方法は、2次元配列の場合と似ています。違いは、3次元配列から項目を取得するには3つ目のインデックス番号を指定する必要がある点です。「Mocha」を配列から取り出してみましょう。

print(menu_items[1, 0, 2])

このコードは「Mocha」を返します。

「1」はアクセスしたい第1次元のインデックス番号(1は飲料に対応)、「0」は第2次元のインデックス番号(0はカフェイン入り飲料に対応)、「2」は第3次元のインデックス番号(2はMochaに対応)です。

配列の次元数を調べる方法

次元を追加していくと、NumPy配列はかなり複雑に見えてきます。まだ3次元を超える配列については触れてもいません!幸い、配列が何次元かを簡単に調べられる便利なショートカットがあります。

以下のコードをPythonファイルに貼り付けてください。

import numpy as np

menu_items = np.array([
	["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
	["Cappuccino", "Espresso", "Mocha"]
])

print(menu_items.ndim)

コードを実行すると、「2」という値が返されます。これは、配列が2つの次元を持っていることを示しています。上記の配列を見れば、それが正しいことがわかります。

まとめ

NumPy配列は、類似した値を柔軟に格納するための手段です。従来のPythonの配列よりも高速かつ効率的に動作します。また、NumPy配列なら複数次元のデータも簡単に扱えます。これは素のPythonでは難しい作業です。

これであなたも、プロのプログラマーのようにNumPy配列を使いこなせるようになりました!

  1. Googleフォトの使い方を徹底解説!初心者向け完全ガイド

    スマートフォンやカメラ、タブレットで撮影する写真が増える一方の昨今、端末のギャラリー管理に悩んでいる方も多いのではないでしょうか。写真のオンライン整理なら、Googleフォトが断然おすすめです。直感的な操作性、無料で使える手軽さ、そしてGoogleの強力なAI技術によるサポートなど、モバイル撮影好きなら押さえておきたい必須プラットフォームといえます。サービス開始からわずか2年でユーザー数5億人を突破し、1日あたり12億枚もの写真がアップロードされている人気ぶりです。iOS、Android、Webのすべてに対応しており、デバイスを問わずアクセスできる点も大きな魅力。無料プランでも15GBのストレ

  2. 初心者向けCheat Engine(チートエンジン)徹底解説|インストールからBlueStacksでの使い方まで

    Cheat Engine(チートエンジン)は、Windows向けのゲーム改造ツールとして最も有名なものの一つです。メモリをスキャンし、デバッガー機能を利用してゲーム内の数値(HP・所持金・スコアなど)を自由に書き換えることで、ゲームの制限を回避したり、単純に楽しんだりするために、世界中のゲーマーに愛用されています。非常に強力なツールである反面、インターフェースは初心者にはやや取っ付きにくく、ある程度の操作慣れが必要です。そこで本記事では、初めての方でも迷わず使えるよう、Cheat Engineの基本的な使い方をステップごとに丁寧に解説します。ただし、始める前に押さえておきたい重要なポイントがあ