ホームページ  >  記事  >  バックエンド開発  >  numpy ライブラリのコア機能と利点をより深く理解する

numpy ライブラリのコア機能と利点をより深く理解する

王林
王林オリジナル
2024-01-19 09:28:05619ブラウズ

numpy ライブラリのコア機能と利点をより深く理解する

numpy ライブラリのコア機能と利点を深く理解するには、具体的なコード例が必要です

Python はオープンソースの高水準プログラミング言語であり、numpy はPython ライブラリの重要な拡張機能。 Numpy は Numerical Python の略で、強力な多次元配列オブジェクトとそれに対応するさまざまな演算関数を提供し、Python 科学計算の中核ライブラリの 1 つです。データ処理、機械学習、深層学習などの分野では、numpy が重要な役割を果たします。この記事では、具体的なコード例とともに、numpy ライブラリの中心的な機能と利点を詳しく紹介します。

  1. ndarray 多次元配列オブジェクト

numpy の中核となるデータ構造は、効率的な多次元配列オブジェクトである ndarray (N 次元配列) です。 ndarray 配列の要素の型は同じである必要があり、整数、浮動小数点数などにすることができ、それらはメモリに継続的に格納されます。 ndarray 配列には、shape (配列の次元)、dtype (要素の種類)、size (要素の総数)、ndim (配列の次元) など、いくつかの重要な属性があります。

次は、ndarray 配列を作成する簡単な例です:

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

出力結果は次のとおりです:

[1 2 3]
(3,)
int64

reshape を通じて ndarray 配列の次元を変更することもできます。 () メソッド:

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

出力結果は次のとおりです:

(2, 3)
[[1 2]
 [3 4]
 [5 6]]
  1. ベクトル化操作

numpy のもう 1 つの機能はベクトル化操作であり、これは非常に重要です。機能により、コンピューティング効率が大幅に向上するだけでなく、コード作成の難しさも簡素化されます。たとえば、ndarray 配列の各要素に特定の数値を追加したいとします。ベクトル化演算を使用しない場合は、ループを記述する必要があります。このようなコードは、多くの場合、非常に非効率で、保守が困難です。 numpy のベクトル化操作を使用すると、1 行のコードを記述するだけでこれを実現できます:

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

出力結果は次のとおりです:

[2 3 4]
  1. Broadcast

numpy ブロードキャスト関数を使用すると、さまざまな形状の配列に対して計算を実行できます。これは、numpy のベクトル化操作の鍵でもあります。ブロードキャストのルールは非常に単純です。2 つの配列の後縁の次元 (つまり、末尾から始まる次元) の軸の長さが一致するか、一方の配列の長さが 1 の場合、それらはブロードキャスト互換とみなされます。ブロードキャストは、欠落している次元または長さ 1 の次元で行われます。

次はブロードキャストの簡単な例です:

a = np.arange(4)
b = np.ones(3)
c = a[:, np.newaxis] + b
print(c)

出力結果は次のとおりです:

[[1. 1. 1.]
 [2. 2. 2.]
 [3. 3. 3.]
 [4. 4. 4.]]

上の例では、1 次元配列 a と a one を作成しました。 -次元配列 b、それらの次元は異なります。ベクトル化操作を実行できるようにするために、ブロードキャスト機能を使用して配列 a に新しい次元を追加し、a と b の次元が同じになるようにします。

  1. ufunc 関数

numpy の ufunc 関数は、加算 (加算)、減算 (減算)、乗算 (乗算) を含む、ndarray 配列を操作する一連の関数です。 )、割る(割る)、余り(余り)を求めるなど。これらの関数の特別な特徴は、ループせずに配列全体を操作できることです。さらに、ufunc 関数は、形状の異なる 2 つの配列を操作できるブロードキャスト関数もサポートしており、非常に便利で実用的です。

次は、ufunc 関数の簡単な例です:

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

出力結果は次のとおりです:

[5 7 9]
  1. スライスとインデックス付け
#numpy スライスとインデックス作成は、Python のスライスとインデックス作成に似ています。 ndarray 配列は多次元であるため、numpy のスライスとインデックス付けはより柔軟です。ステートメント a[i] を使用して numpy 配列の i 番目の要素にアクセスすることも、a[i:j] を使用して配列の i 番目から j 番目の要素を取得することもできます。さらに、楕円 (...) を使用して他のすべての次元を表すことができます。多次元配列の場合、a[i, j] を使用して i 番目の行と j 番目の列の要素を取得し、a[:, j] を使用して j 番目の列のすべての要素を取得します。 [i, :] i 行目の要素をすべて取得するなど。

次は、多次元配列のスライスとインデックス付けの簡単な例です:

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a[0, 1])
print(a[1, :])
print(a[:, 0:2])

出力結果は次のとおりです:

2
[4 5 6]
[[1 2]
 [4 5]
 [7 8]]

    乱数の生成
numpy は、np.random.rand()、np.random.randn()、np.random.randint()、np.random.shuffle() など、乱数を生成するためのいくつかの関数も提供します。 。これらの機能は、データ分析、シミュレーション、機械学習などの分野で使用できます。

次は乱数生成の簡単な例です:

a = np.random.rand(3)
b = np.random.randn(3)
c = np.random.randint(0, 10, size=(2, 3))
print(a)
print(b)
print(c)

出力結果は次のとおりです:

[0.1688015  0.15220492 0.44022309]
[-0.09097023  1.19200587  1.17187612]
[[5 8 8]
 [0 9 1]]

概要

numpy は非常に強力で柔軟です。 library には、効率的な多次元配列オブジェクト、ベクトル化操作とブロードキャスト、ufunc 関数、スライスとインデックス付け、乱数生成など、多くの中核となる機能と利点があります。データサイエンスや人工知能に関連する分野において、numpyはかけがえのない重要な役割を果たしています。 numpyの使い方やコード実装を深く理解し、基本原理や共通操作をマスターし、実際の業務や学習に応用して効率や精度を高める必要があります。

以上がnumpy ライブラリのコア機能と利点をより深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。