Python NumPy初心者向けチュートリアル

⚡ スマートサマリー

NumPyは基礎となる Python 数値計算、配列、行列、線形代数、ランダムサンプリングのためのライブラリ。この NumPy チュートリアルでは、インストール、配列の作成、再共有について説明します。pingスライス、統計、および実行可能な行列演算 Python 例。

  • コア用途: 高速なN次元配列とベクトル化された数学 Python.
  • ⚙️ 主な機能: ゼロ、イチ、形状変更、hstack、ドット、linspace。
  • 📚 Foundations: 線形代数、放送、統計、スライス。
  • 🚀 現在のバージョン: NumPy 2.x(2024年6月リリース)が安定版になりました。
  • 🤖 AIの活用: Pyの基盤Torch、TensorFlow、JAX、およびCuPyテンソル。

Python NumPy チュートリアル

NumPyとは何か Python?

NumPy オープンソースである Python 数学、科学、工学、データサイエンスのプログラミングのためのライブラリ。数学および統計演算に非常に便利なライブラリです。 Python多次元配列や行列乗算と完全に連携し、C言語と簡単に統合できます。C++ (NAIST) と Fortran.

あらゆる科学プロジェクトにおいて、NumPyは必須のツールです。N次元配列、線形代数、乱数生成、フーリエ変換など、幅広い用途に対応しています。

NumPyは Python 多次元配列と行列に対する一流のサポート、およびそれらに対して作用する多数の数学演算。このガイドでは、チュートリアルに進む前に知っておく必要がある基本的な関数を確認します。TensorFlow。 '

NumPy を使用する理由

NumPyはメモリ効率が良いので、純粋な数値データライブラリよりも大量の数値データを容易に処理できます。 Python リスト。行列の乗算や再帰にも非常に便利です。ping、そして、重い処理はコンパイル済みのCルーチンに委任されるため、高速です。実際、TensorFlow、PyなどのライブラリはTorchやScikit-learnは、バックエンドで行列演算にNumPy配列を使用しているため、NumPyは最新のデータサイエンスやAIワークフローのほとんどを支える、目立たないながらも重要な役割を担っています。

NumPyのインストール方法

NumPyライブラリをインストールするには、チュートリアルを参照してください。 TensorFlow のインストール方法。 NumPy はデフォルトで Anaconda とともにインストールされます。

NumPyがインストールされていない稀なケースでは、以下のいずれかのオプションを使用してください。

Anaconda を使用して NumPy をインストールできます。

conda install -c anaconda numpy
  • In Jupyter ノートブック:
import sys
!conda install --yes --prefix {sys.prefix} numpy

Pipユーザーは、以下のコマンド1つでインストールまたはアップグレードできます。

pip install --upgrade numpy

NumPyをインポートしてバージョンを確認する

numpy をインポートするコマンドは次のとおりです。

import numpy as np

上記の行は、NumPy名前空間を次のように変更します。 npこのショートカットを使用すると、NumPy の関数、メソッド、属性にプレフィックスを付けることができます。 np. tyの代わりにping numpy.そして、これはNumPyエコシステム全体で見られる標準的な慣例です。

インストールされているNumPyのバージョンを確認するには、以下のコマンドを使用してください。

print(np.__version__)

出力:

2.1.3

NumPy 2.0 は 2024 年 6 月にリリースされ、現在の安定版メジャー シリーズです。プロジェクトがまだ 1.x API に依存している場合は、 numpy<2 要件ファイルには、次のようなレガシーエイリアスが含まれているため、 np.float バージョン2.0で削除されました。

何が Python NumPy配列?

NumPy配列は、少し次のような見た目です。 Python 一見するとリストのように見えますが、動作は大きく異なります。このトピックに馴染みのない読者のために、ndarrayとは何か、そしてなぜそれが重要なのかを明確にしておきましょう。

名前が示すように、NumPy配列はNumPyライブラリの中心的なデータ構造です。名前自体は「Numeric」の略です。 Python”または“数値 Python」であり、ndarray は形状とデータ型が既知の、均質で固定サイズのメモリブロックです。

NumPy 配列の作成

NumPyで配列を作成する最も簡単な方法は、 Python リスト.

myPythonList = [1,9,8,3]

変換 Python リストをNumPy配列に変換する np.array.

numpy_array_from_list = np.array(myPythonList)

配列の内容を表示します。

numpy_array_from_list

出力:

array([1, 9, 8, 3])

実際には、 Python まずリストを作成してください。この2つの手順は組み合わせることができます。

a = np.array([1,9,8,3])

注: NumPyのドキュメントにも記載されています np.ndarray、 だけど np.array 日常使用には、工場出荷時の状態のままが推奨されます。

同様の方法で、タプルからNumPy配列を作成することもできます。

数学 Opera配列上のオプション

足し算、引き算などの数学演算を実行できますtrac配列に対する乗算、除算、乗算。構文は配列名に続いて演算子(+, -, *, /) の後にオペランドが続きます。これらの操作はベクトル化されているため、NumPy は明示的な指定なしにすべての要素にこれらを適用します。 Python ループ。

例:

numpy_array_from_list + 10

出力:

array([11, 19, 18, 13])

この操作は、NumPy配列の各要素に10を加算します。

配列の形状

配列の形状は、 shape 属性は、配列名に追加することでアクセスできます。同様に、型をチェックすることもできます。 dtype.

import numpy as np
a = np.array([1,2,3])
print(a.shape)
print(a.dtype)

(3,)
int64

整数とは小数点のない値のことです。小数点を含む配列を作成すると、データ型は浮動小数点数に変更されます。

#### Different type
b = np.array([1.1,2.0,3.2])
print(b.dtype)

float64

2次元配列

括弧の中にカンマを入れることで、次元を追加できます。

内側のタプルは外側の括弧の中に配置する必要があることに注意してください。 [].

### 2 dimension
c = np.array([(1,2,3),
              (4,5,6)])
print(c.shape)
(2, 3)

3次元配列

より高次元も同様の方法で構築できる。

### 3 dimension
d = np.array([
    [[1, 2,3],
        [4, 5, 6]],
    [[7, 8,9],
        [10, 11, 12]]
])
print(d.shape)
(2, 2, 3)
DevOps Tools Engineer試験のObjective Code
配列の作成 配列([1,2,3])
形状を印刷する array([.]).shape

numpy.zeros()とは何ですか?

numpy.zeros() or np.zeros   Python ゼロで埋められた行列を作成するために使用される関数。 numpy.zeros() これは、TensorFlow の最初の反復処理中に重みを初期化する必要がある場合や、他の統計タスク用のプレースホルダーバッファを設定する必要がある場合に役立ちます。

numpy.zeros() 関数の構文

numpy.zeros(shape, dtype=float, order='C')

Python numpy.zeros() パラメータ

ここでは、

  • 形状: NumPyゼロ配列の形状。
  • Dタイプ: 要素のデータ型。オプションであり、デフォルト値は float64.
  • 注文: デフォルトは Cこれは、行優先レイアウトです。 numpy.zeros() in Python.

Python numpy.zeros() の例

import numpy as np
np.zeros((2,2))

出力:

array([[0., 0.],
          [0., 0.]])

データ型を使用した numpy ゼロの例

import numpy as np
np.zeros((2,2), dtype=np.int16)

出力:

array([[0, 0],
         [0, 0]], dtype=int16)

numpy.ones() とは何ですか?

np.ones() 関数 1で埋め尽くされた行列を作成します。 numpy.ones() in Python これは、TensorFlow の最初の反復処理中に重みを初期化する場合や、その他の統計タスクに役立ちます。

Python numpy.ones() 構文

numpy.ones(shape, dtype=float, order='C')

Python numpy.ones() パラメータ

ここでは、

  • 形状: np.ones の形状 Python 配列.
  • Dタイプ: 要素のデータ型。オプションであり、デフォルト値は float64.
  • 注文: デフォルトは Cこれは行優先レイアウトです。

Python numpy.ones() 2D 配列とデータ型の例

import numpy as np
np.ones((1,2,3), dtype=np.int16)

出力:

array([[[1, 1, 1],
       [1, 1, 1]]], dtype=int16)

numpy.reshape()関数 Python

Python NumPy のリシェイプ 配列の形状を変更しても、データは変更しません。データをワイド形式からロング形式に整形したり、1Dベクトルから2D行列に変換してからモデルに入力する必要がある場合があります。 np.reshape この関数はこれを1回の呼び出しで処理します。

np.reshape() の構文

numpy.reshape(a, newShape, order='C')

ここでは、

a: 形状を変更したい配列。

新しい形状:新しい望ましい形状。

注文: デフォルトは C行優先レイアウト。

NumPy の変形例

import numpy as np
e = np.array([(1,2,3), (4,5,6)])
print(e)
e.reshape(3,2)

出力:

 // Before reshape
[[1 2 3]
 [4 5 6]]
//After Reshape
array([[1, 2],
	[3, 4],
	[5, 6]])

numpy.flatten() の Python

Python NumPy フラット化 配列のコピーを1次元に縮約して返します。畳み込みニューラルネットワーク(convnetなど)を扱う場合、多くの場合、画像テンソルを全結合層に渡す前に平坦化する必要があります。 np.flatten() この関数は、これを1回の呼び出しで処理します。

np. flatten() の構文

numpy.flatten(order='C')

ここでは、
注文: デフォルトは C行優先レイアウト。

NumPy フラット化の例

e.flatten()

出力:

array([1, 2, 3, 4, 5, 6])

numpy.hstack()とは何か Python?

numpy.hstack   Python 入力配列のシーケンスを水平方向に積み重ねて単一の配列にするために使用される関数。 hstack()列軸に沿ってデータを追加します。これは、特徴ベクトルを横に並べて結合する必要がある場合に、NumPyで非常に便利なヘルパーです。

勉強しましょう hstack in Python 例を示します。

例:

## Horizontal Stack
import numpy as np
f = np.array([1,2,3])
g = np.array([4,5,6])
print('Horizontal Append:', np.hstack((f, g)))

出力:

Horizontal Append: [1 2 3 4 5 6]

numpy.vstack()とは何か Python?

numpy.vstack   Python 入力配列のシーケンスを垂直方向に積み重ねて単一の配列にするために使用される関数。 vstack()行軸に沿ってデータを追加すると、複数のサンプルをまとめて処理したい場合に便利です。

例を挙げて見ていきましょう。

例:

## Vertical Stack
import numpy as np
f = np.array([1,2,3])
g = np.array([4,5,6])
print('Vertical Append:', np.vstack((f, g)))

出力:

Vertical Append: [[1 2 3]
 [4 5 6]]

NumPyを勉強した後 vstack (NAIST) と hstackそれでは、NumPyで乱数を生成する例を見てみましょう。

ランダム生成 Numbers NumPyを使用する

ガウス分布から乱数を生成するには、以下を使用します。

numpy.random.normal(loc, scale, size)

ここでは、

  • Loc平均値。分布の中心。
  • 規模:標準偏差。
  • サイズ:返却されたサンプルの数。

例:

## Generate random numbers from a normal distribution
normal_array = np.random.normal(5, 0.5, 10)
print(normal_array)
[5.56171852 4.84233558 4.65392767 4.946659   4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]

グラフにプロットすると、分布は以下のグラフのようになる。

ランダムを生成する例 Numbers NumPyを使用する
ランダムを生成する例 Numbers NumPyを使用する

新しいコードでは、最新のジェネレーターAPIがますます使用されるようになっていることに注意してください。 np.random.default_rng()これは、従来の代替品として推奨されています。 np.random.normal NumPy 2.x での呼び出し。

NumPy Asarray 関数

その asarray() この関数は入力を配列に変換します。入力はリスト、タプル、ndarray、または同様のシーケンスです。

構文:

numpy.asarray(data, dtype=None, order=None)

ここでは、

データ: 配列に変換したいデータ。

dtype:オプション。指定しない場合、データ型は入力データから推測されます。

注文: デフォルトは C行優先レイアウト。もう1つのオプションは F (Fortranスタイル(列優先)。

例:

次の4行4列の2次元行列を考えてみましょう。この行列は1で埋められています。

import numpy as np
A = np.matrix(np.ones((4,4)))

行列内の値を変更しようとすると np.arrayオリジナルは変更されていません。理由は np.array マトリックスのコピーを作成します。

np.array(A)[2]=2
print(A)
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

行列は変更されていません。 asarray 元の配列をその場で変更したい場合。3行目を値2に設定するとどうなるか見てみましょう。

np.asarray(A)[2]=2
print(A)

Code 説明:

np.asarray(A) 行列を変換します A 配列ビューに。

[2] 3行目を選択します。

出力:

[[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [2. 2. 2. 2.] # new value
      [1. 1. 1. 1.]]

numpy.arange() とは何ですか?

numpy.arange() は、定義された間隔内で等間隔の値を含む ndarray を返す NumPy の組み込み関数です。たとえば、1 から 10 までの値を作成するには、 を呼び出すことができます。 np.arange() in Python.

構文:

numpy.arange(start, stop, step, dtype)

Python NumPy arange パラメータ:

  • お気軽にご連絡ください: 区間の開始 np.arange in Python.
  • Force Stop:区間の終了。
  • 手順値間の間隔。デフォルトの間隔は1です。
  • Dタイプ: NumPyの出力配列の型 arange.

例:

import numpy as np
np.arange(1, 11)

出力:

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

例:

この NumPy のステップを変更するには arange 例えば、括弧の中に3つ目の数字を追加すると、ステップサイズが変わります。

import numpy as np
np.arange(1, 14, 4)

出力:

array([ 1,  5,  9, 13])

NumPy リンスペース関数

linspace 2つのエンドポイント間で等間隔のサンプルを返します。

構文:

numpy.linspace(start, stop, num, endpoint)

ここでは、

  • お気軽にご連絡ください: シーケンスの開始値。
  • Force Stop: シーケンスの終了値。
  • 生成するサンプル数。デフォルト値は50です。
  • エンドポイント:もし True (デフォルト)、 stop 最後の値です。 False, stop 含まれていません。

例:

例えば、1から5までの10個の等間隔の値を作成するために使用できます。

import numpy as np
np.linspace(1.0, 5.0, num=10)

出力:

array([1.        , 1.44444444, 1.88888889, 2.33333333, 2.77777778,       3.22222222, 3.66666667, 4.11111111, 4.55555556, 5.        ])

区間に最後の桁を含めたくない場合は、 endpoint 〜へ False.

np.linspace(1.0, 5.0, num=5, endpoint=False)

出力:

array([1. , 1.8, 2.6, 3.4, 4.2])

LogSpace NumPy関数 Python

logspace 対数スケール上で等間隔の数値を返します。 logspace 同じパラメータを共有します np.linspace.

構文:

numpy.logspace(start, stop, num, endpoint)

例:

np.logspace(3.0, 4.0, num=4)

出力:

array([ 1000. ,  2154.43469003,  4641.58883361, 10000.        ])

最後に、配列内の単一要素のメモリサイズを確認したい場合は、 itemsize.

x = np.array([1,2,3], dtype=np.complex128)
x.itemsize

出力:

16

各要素には 16 バイトが必要です。

インデックスとスライス Python

NumPyを使えばデータのスライスは簡単です。行列をスライスしてみましょう。 e。 に Python行または列を返すには、角括弧を使用します。
例:

## Slice
import numpy as np
e = np.array([(1,2,3), (4,5,6)])
print(e)
[[1 2 3]
 [4 5 6]]

NumPyでは、配列の最初のインデックスは0から始まることに注意してください。

## First row
print('First row:', e[0])

## Second row
print('Second row:', e[1])

出力:

First row: [1 2 3]
Second row: [4 5 6]

In Python他の多くの言語と同様に、

  • コンマの前の値は行数を表します。
  • コンマの後の値は列数を表します。
  • 列を選択する場合は、追加してください。 : 列インデックスの前。
  • : 選択した列のすべての行を取得したいという意味です。
print('Second column:', e[:,1])
Second column: [2 5]

2行目の最初の2つの値を返すには、 : 2番目のインデックスまでのすべての列を選択します。

## Second Row, two values
print(e[1, :2])
[4 5]

統計関数 Python

NumPyには、与えられた配列から最小値、最大値、パーセンタイル、標準偏差、分散などを求めるための便利な統計関数が多数用意されています。よく使われる関数を以下に示します。

NumPyには、表にまとめたような強力な統計ヘルパーが付属しています。

演算 ナンシー
最小値 np.min()
最大値 np.max()
平均 np.mean()
中央値 np.median()
標準偏差 np.std()

次の配列を考えてみましょう。

例:

import numpy as np
normal_array = np.random.normal(5, 0.5, 10)
print(normal_array)

出力:

[5.56171852 4.84233558 4.65392767 4.946659   4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]

NumPy統計関数の例

### Min
print(np.min(normal_array))

### Max
print(np.max(normal_array))

### Mean
print(np.mean(normal_array))

### Median
print(np.median(normal_array))

### Sd
print(np.std(normal_array))

出力:

4.467042435266913
5.612113171990201
4.934841002270593
4.846995625786663
0.3875019367395316

numpy ドット積とは何ですか?

numpy.dot は行列計算のための強力な関数です。たとえば、ドット積は次のように計算できます。 np.dot. numpy.dot ドット積を返します a (NAIST) と b1次元配列と2次元配列の両方を扱います。2次元入力の場合は、行列乗算を実行します。

構文:

numpy.dot(x, y, out=None)

技術パラメータ

ここでは、

x、y入力配列。 x (NAIST) と y 両方とも1Dまたは2Dである必要があります np.dot() 内積または行列乗算として機能します。

でる: 結果を格納するために使用されるオプションの出力引数。指定しない場合は、ndarrayが返されます。

返品

関数 numpy.dot() 2つの配列の内積を返します。 x (NAIST) と y両方が1次元の場合はスカラーを返し、そうでない場合は配列を返します。 out が指定されると、その配列が返されます。

発生させます

ドット積 Python 上げる ValueError 最後の次元が x 最後から2番目の次元と一致しません y.

例:

## Linear algebra
### Dot product: product of two arrays
f = np.array([1,2])
g = np.array([4,5])
### 1*4+2*5
np.dot(f, g)

出力:

14

行列の乗算 Python

NumPy matmul() この関数は、2つの配列の行列積を返します。その仕組みは以下のとおりです。

1) 2次元配列の場合、通常の行列積を返します。

2) 次元が2より大きい場合、積は行列のスタックとして扱われます。

3) 1次元配列をまず行列に変換し、次に積を計算します。

中置 @ オペレーター、利用可能 Python 3.5 は、 matmul そして、現代のコードにおいて広く用いられている。

構文:

numpy.matmul(x, y, out=None)

ここでは、

x、y入力配列。スカラー値は使用できません。

でる: オプションのパラメータ。通常、出力はndarrayに格納されます。

例:

同様に、行列の乗算は次のように計算できます。 np.matmul.

### Matmul: matrix product of two arrays
h = [[1,2],[3,4]]
i = [[5,6],[7,8]]
### 1*5+2*7 = 19
np.matmul(h, i)

出力:

array([[19, 22],
            [43, 50]])

行列式

行列の行列式を計算する必要がある場合は、 np.linalg.det()NumPyは次元の処理を自動的に行ってくれます。

例:

## Determinant 2*2 matrix
### 5*8-7*6
np.linalg.det(i)

出力:

-2.000000000000005

NumPyブロードキャストの説明

ブロードキャストとは、NumPyがデータのコピーなしに異なる形状の配列に対して算術演算を実行できるようにするルールです。スカラーを1次元ベクトルに加算したり、1次元ベクトルを2次元行列に加算したりすると、NumPyは小さい方のオペランドを欠落している軸に沿って引き伸ばし、形状が揃うようにします。これにより、明示的なコピーが不要になります。 Python ループは、NumPy コードが高速かつ簡潔に感じられる主な理由の 1 つです。

2 つの形状が放送に適しているのは、右から左に比較したときに、各次元のペアが等しいか、またはどちらか一方が 1 に等しい場合です。たとえば、形状のマトリックス (3, 4) 形状の列に対して放送する (4,) または形状の柱 (3, 1)機械学習における正規化も同じロジックに基づいており、trac1行にサンプルバッチから特徴量ごとの平均ベクトルを出力します。ブロードキャストは、Pyなどのテンソルライブラリで使用される概念モデルでもあります。Torch、TensorFlow、JAXなど、ここで学ぶルールはGPUコードに直接適用できます。

NumPyがAIと機械学習をどのように強化するか

NumPyは、現代のほとんどすべての技術の基盤となっている。 Python AIスタック。PythonTorch テンソル、TensorFlow イーガーテンソル、および JAX 配列は、同じブロードキャスト、スライス、および再共有機能を提供します。ping NumPy ndarray で学習した API です。多くのチュートリアルでは、前処理済みの NumPy 配列をモデルのトレーニング ループに渡しており、フレームワークは変換なしでそれらを受け入れています。

NumPyが今日のAI開発にどのように活用されているかを示す3つの具体的な例をご紹介します。まず、データエンジニアは、生の特徴量をNumPy配列に変換してから、scikit-learnパイプラインやHugging Faceデータセットに渡します。次に、研究者はNumPyをCPUのベースラインとして使用し、その後、ほぼ同じAPIを提供しながらCUDAを介してNVIDIA GPU上で動作するCuPyに切り替えます。最後に、JAXはNumPy APIをベースに、自動微分とジャストインタイムコンパイル機能を追加することで、ラップトップで動作するコードをクラウド上のTPUでも実行できるようにします。つまり、NumPyで習得した配列スキルは、主要なディープラーニングツールキットすべてに応用できるため、このチュートリアルはAI開発への道のりにおける有益なステップとなるでしょう。

よくあるご質問

NumPyは、高速なN次元配列、ベクトル演算、線形代数、ランダムサンプリング、フーリエ変換を提供します。エンジニアやデータサイエンティストは、数値計算、画像処理、信号処理、統計処理、そしてpandas、scikit-learn、SciPyといった上位ライブラリの配列基盤としてNumPyを利用しています。

NumPy配列は、固定されたデータ型の要素を連続したメモリブロックに格納するため、ベクトル化された計算が高速になります。 Python リストは任意のオブジェクトを保持でき、複数の型を混在させることができ、要素ごとのループ処理は遅いため、柔軟性は高いものの、大規模な数値計算処理にははるかに非効率的です。

2024年6月にリリースされたNumPy 2.0は、コア配列APIを安定させつつ、長らく非推奨だったエイリアスを削除しています。 np.float (NAIST) と np.int型昇格ルールを厳格化します。ほとんどのプロダクションコードは軽微な修正で済みます。 numpy<2 依存関係がまだ更新されていない場合。

PyTorchとTensorFlowは、テンソルオブジェクトをNumPyのndarrayに基づいてモデル化しています。形状、ブロードキャスト、スライスに関するセマンティクスは共通しており、どちらもNumPy配列を入力として受け入れます。NumPyで習得したスキルは、ニューラルネットワークの構築、トレーニングループ、テンソル前処理パイプラインの構築に直接応用できます。

標準のNumPyはCPU上で動作します。GPUアクセラレーションを利用するには、NVIDIA CUDAデバイス上でNumPy APIをミラーリングするCuPy、またはGPUとTPU向けに自動差分とジャストインタイムコンパイル機能を追加するJAXを使用します。どちらの方法も、AIワークロード向けに既存のNumPyコードのほとんどを最小限の書き換えで再利用できます。

AnacondaにはデフォルトでNumPyが同梱されています。そうでない場合は、以下を実行してください。 pip install numpy or conda install -c anaconda numpy既存のインストールを NumPy 2.x にアップグレードするには、以下を実行します。 pip install --upgrade numpyアクティブバージョンを確認するには print(np.__version__) 内部 Python.

ブロードキャスト機能により、NumPyはデータのコピーなしに、形状の異なる配列を操作できます。次元が互換性がある場合、小さい方の配列は仮想的に大きい方の配列に合わせて引き伸ばされます。これにより、機械学習パイプラインにおける正規化、スケーリング、特徴量エンジニアリングのための簡潔な式を実現できます。