NumPyのデータ
15928 ワード
NumPyの概要
Pythonは便利ですが、遅いです.ただし、Cなどの言語で書かれたコードを実行するライブラリにアクセスできます.NumPyは、Pythonの数学演算により、マトリクスなどのデジタルグループと効率的に組み合わせて使用できるより高速な代替案を提供するライブラリです.
NumPyは大きなライブラリで、ここでは毛皮だけを話しています.Pythonで多くの数学計算を行うつもりなら、このドキュメントをもっと読む時間が必要です.
NumPyのインポート
NumPyライブラリをインポートする場合、多くの場合(ここを含む)に表示される約束は、
次の例では、関数とタイプ名に接頭辞
データ型と形状
NumPyで数字を処理する最も一般的な方法は
任意の数の次元を格納できるため、
スカラー
NumPyのスカラーはPythonのスカラータイプより多い.Pythonが基本タイプ
これらのタイプは、作成した各オブジェクト(ベクトル、マトリクス、テンソル)が最終的にスカラーを格納するため重要です.また、NumPy配列を作成する場合は、タイプを指定できます.ただし、配列の各項目には同じタイプが必要です.この点では、PythonリストではなくC配列のようになります.
スカラーを含むNumPy配列を作成する場合は、次のようにNumPyの
しかし、
配列の
結果が印刷されます.すなわち、空カッコのペア
スカラーが配列に存在しても、通常のスカラーのように使用できます.次のように入力できます.
ちなみに、スカラータイプでもほとんどの配列関数がサポートされています.したがって、配列でなくても次元がゼロであるため、
ベクトル(Vector)
ベクトルを作成するには、次のようにPythonリストを
ベクトルの
数値が表示されると、shapeは各
インデックスを使用して、ベクトル内の要素にアクセスできます.次のようになります.
現在
NumPyはまた、高度なインデックス技術をサポートします.たとえば、2番目の要素とその後ろの項目にアクセスするには、次のように書くことができます.
配列
マトリックス
NumPyの
その
ベクトルのようにマトリクスの要素にアクセスできますが、追加のインデックス値を使用します.したがって、上記のマトリクスで数値
テンソル
テンソルはベクトルや行列と同じですが、テンソルはより多くの次元を持つことができます.たとえば、3 x 3 x 2 x 1のテンソルを作成するには、次のようにします.
一方、
マトリクスのようにアイテムにアクセスできますが、より多くのインデックスを使用する必要があります.したがって、
シェイプの変更
実際に内容を変更することなく、データの形状を変更する必要がある場合があります.たとえば、1次元のベクトルがあるかもしれませんが、2次元のマトリクスが必要です.それを実現する方法は2つある.
次のベクトルがあるとします.
呼び出し
呼び出し
NumPy配列の形状を変更するには、経験豊富なNumPyユーザーのコードを見ると、
または
これらのコードは、
優達学城から転向する.
Pythonは便利ですが、遅いです.ただし、Cなどの言語で書かれたコードを実行するライブラリにアクセスできます.NumPyは、Pythonの数学演算により、マトリクスなどのデジタルグループと効率的に組み合わせて使用できるより高速な代替案を提供するライブラリです.
NumPyは大きなライブラリで、ここでは毛皮だけを話しています.Pythonで多くの数学計算を行うつもりなら、このドキュメントをもっと読む時間が必要です.
NumPyのインポート
NumPyライブラリをインポートする場合、多くの場合(ここを含む)に表示される約束は、
np
という名前で、次のようになります.import numpy as np
次の例では、関数とタイプ名に接頭辞
np.
を付けてライブラリを使用できます.データ型と形状
NumPyで数字を処理する最も一般的な方法は
ndarray
オブジェクトを通過することである.Pythonリストと似ていますが、任意の数の次元を持つことができます.また,ndarray
は高速な数学演算をサポートしており,これはまさに我々が望んでいることである.任意の数の次元を格納できるため、
ndarray
を使用して、スカラー、ベクトル、マトリクス、テンソルなど、前に述べた任意のデータ型を表すことができます.スカラー
NumPyのスカラーはPythonのスカラータイプより多い.Pythonが基本タイプ
int
、float
などではないように、NumPyは記号と記号のないタイプと異なるサイズを指定することができます.したがって、Pythonのint
を除いて、uint8
、int8
、uint16
、int16
、array
などのタイプを使用することができます.これらのタイプは、作成した各オブジェクト(ベクトル、マトリクス、テンソル)が最終的にスカラーを格納するため重要です.また、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]
現在
x
は2
に等しい.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のサイズの新しい次元を追加するように要求します.今は変に見えるかもしれませんが、よくある技術なので、悪いところはありません.優達学城から転向する.