NumPyのデータ

15928 ワード

NumPyの概要
Pythonは便利ですが、遅いです.ただし、Cなどの言語で書かれたコードを実行するライブラリにアクセスできます.NumPyは、Pythonの数学演算により、マトリクスなどのデジタルグループと効率的に組み合わせて使用できるより高速な代替案を提供するライブラリです.
NumPyは大きなライブラリで、ここでは毛皮だけを話しています.Pythonで多くの数学計算を行うつもりなら、このドキュメントをもっと読む時間が必要です.
NumPyのインポート
NumPyライブラリをインポートする場合、多くの場合(ここを含む)に表示される約束は、npという名前で、次のようになります.
import numpy as np

次の例では、関数とタイプ名に接頭辞np.を付けてライブラリを使用できます.
データ型と形状
NumPyで数字を処理する最も一般的な方法はndarrayオブジェクトを通過することである.Pythonリストと似ていますが、任意の数の次元を持つことができます.また,ndarrayは高速な数学演算をサポートしており,これはまさに我々が望んでいることである.
任意の数の次元を格納できるため、ndarrayを使用して、スカラー、ベクトル、マトリクス、テンソルなど、前に述べた任意のデータ型を表すことができます.
スカラー
NumPyのスカラーはPythonのスカラータイプより多い.Pythonが基本タイプintfloatなどではないように、NumPyは記号と記号のないタイプと異なるサイズを指定することができます.したがって、Pythonのintを除いて、uint8int8uint16int16arrayなどのタイプを使用することができます.
これらのタイプは、作成した各オブジェクト(ベクトル、マトリクス、テンソル)が最終的にスカラーを格納するため重要です.また、NumPy配列を作成する場合は、タイプを指定できます.ただし、配列の各項目には同じタイプが必要です.この点では、PythonリストではなくC配列のようになります.
スカラーを含むNumPy配列を作成する場合は、次のようにNumPyのndarray関数に値を渡します.
s = np.array(5)

しかし、shape、NumPyスカラーと通常のPythonスカラーの間で数学演算を実行することができます.要素レベルの数学演算コースで参照してください.
配列の()プロパティを確認することで、配列の形状を表示できます.コードを実行できます
s.shape

結果が印刷されます.すなわち、空カッコのペアxです.これは、次元がゼロであることを示します.
スカラーが配列に存在しても、通常のスカラーのように使用できます.次のように入力できます.
x = s + 3
8は、xに等しくなります.numpy.int64のタイプをチェックすると、PythonタイプではなくNumPyタイプを使用しているため、x.shapeである可能性があります.
ちなみに、スカラータイプでもほとんどの配列関数がサポートされています.したがって、配列でなくても次元がゼロであるため、()を呼び出すことができます.普通のPythonスカラーを使って試してみると、エラーが発生します.
ベクトル(Vector)
ベクトルを作成するには、次のようにPythonリストをarray関数に渡すことができます.
v = np.array([1,2,3])

ベクトルのshapeプロパティをチェックすると、ベクトルの1次元の長さを表す単一の数値が返されます.上記の例では、v.shape(3,)を返します.
数値が表示されると、shapeは各ndarrayの次元のサイズを含むメタグループであることがわかります.スカラーの場合、空のメタグループにすぎませんが、ベクトルには次元があるため、メタグループには数値とカンマが含まれます.(Pythonは(3)を1つの項目を持つメタグループと理解できないため、カンマが必要です.メタグループに関する詳細はここで参照してください)
インデックスを使用して、ベクトル内の要素にアクセスできます.次のようになります.
x = v[1]

現在x2に等しい.
NumPyはまた、高度なインデックス技術をサポートします.たとえば、2番目の要素とその後ろの項目にアクセスするには、次のように書くことができます.
v[1:]

配列[2, 3]が返されます.NumPyスライス機能は非常に強力で、ndarrayの任意のアイテムの組合せにアクセスできます.しかし、複雑な場合もあります.このドキュメントで詳細を読むことができます.
マトリックス
NumPyのarray関数を使用して、ベクトルの作成と同じマトリクスを作成します.しかし、今回はリストを渡すだけでなく、リストのリストを提供します.各リストは1行を表します.数値1~9を含む3 x 3マトリクスを作成するには、次のようにします.
m = np.array([[1,2,3], [4,5,6], [7,8,9]])

そのshapeプロパティをチェックすると、メタグループ(3, 3)が返され、各次元の長さが3である2つの次元があることを示します.
ベクトルのようにマトリクスの要素にアクセスできますが、追加のインデックス値を使用します.したがって、上記のマトリクスで数値6を見つけるには、m[1][2]にアクセスできます.
テンソル
テンソルはベクトルや行列と同じですが、テンソルはより多くの次元を持つことができます.たとえば、3 x 3 x 2 x 1のテンソルを作成するには、次のようにします.
t = np.array([[[[1],[2]],[[3],[4]],[[5],[6]]],[[[7],[8]],\
    [[9],[10]],[[11],[12]]],[[[13],[14]],[[15],[16]],[[17],[17]]]])

一方、t.shape(3, 3, 2, 1)を返します.
マトリクスのようにアイテムにアクセスできますが、より多くのインデックスを使用する必要があります.したがって、t[2][1][1][0]16を返します.
シェイプの変更
実際に内容を変更することなく、データの形状を変更する必要がある場合があります.たとえば、1次元のベクトルがあるかもしれませんが、2次元のマトリクスが必要です.それを実現する方法は2つある.
次のベクトルがあるとします.
v = np.array([1,2,3,4])

呼び出しv.shape(4,)を返します.しかし、1 x 4マトリクスがほしいなら?reshape関数を使用すると、次のようになります.
x = v.reshape(1,4)

呼び出しx.shape(1,4)を返します.4 x 1マトリクスがほしい場合は、次のようにします.
x = v.reshape(4,1)
reshape関数は、サイズが1の次元を追加するだけではありません.詳細については、このドキュメントを参照してください.
NumPy配列の形状を変更するには、経験豊富なNumPyユーザーのコードを見ると、reshapeを呼び出すのではなく、特殊なスライス構文を使用することがよく見られます.この構文を使用すると、前の2つの例は次のようになります.
x = v[None, :]

または
x = v[:, None]

これらのコードは、vのすべての項目を表示するスライスを作成し、NumPyに関連軸に1のサイズの新しい次元を追加するように要求します.今は変に見えるかもしれませんが、よくある技術なので、悪いところはありません.
優達学城から転向する.