Python Numpyライブラリの一般的な使い方入門チュートリアル
7507 ワード
この例では、Python Numpyライブラリの一般的な使い方について説明します.皆さんの参考にしてください.具体的には以下の通りです.
1、紹介
Numpyは、形状操作、ソート、選択、入出力、離散フーリエ変換、基本線形代数、基本統計演算、ランダムシミュレーションなど、配列を迅速に操作できる一般的なPython科学技術ライブラリです.多くのPythonライブラリや科学計算のパッケージでは、操作対象としてNumpy配列を使用したり、転送されたPython配列をNumpy配列に変換したりするため、Pythonでは操作データがNumpyから離れられません.
Numpyのコアはndarrayオブジェクトであり、Pythonのn次元配列でカプセル化されているが、C言語で関連する配列操作をプリコンパイルすることで、元のPythonよりも実行効率が高いが、Python言語で符号化され、簡潔なコードと効率的な実行速度を同時に持つ.ndarryと配列にはいくつかの違いがあります.numpy配列の要素は同じタイプで、Python配列オブジェクトが動的に成長できるのとは異なり、作成時に固定されたサイズが決定されます.
2、配列オブジェクト
2.1、属性
Numpyオブジェクトの形式は同構造の多次元配列であり、配列の次元は軸(axis)と呼ばれ、各次元の要素の個数は軸の長さと呼ばれます.例えば次は2×3の2次元配列arrは、第1軸長が3、第2軸長が2
arr配列オブジェクトでよく使用されるプロパティは次のとおりです.
2.2、配列の作成
通常のpython配列をarray()メソッドでラップしてnumpy配列に変換し、dtype=所定の要素のデータ型を通過することができます.配列は、2 Dなどの高次元配列であってもよいし、メタグループの形式であってもよい.
既知のサイズの配列を塗りつぶす必要がある場合は、関数zeros()を使用して要素を0に塗りつぶすか、ones()を1に塗りつぶすか、empty()をランダム数に塗りつぶすことができます.
arange(a,b,c)関数は、aからbまでc長毎に配列要素を生成するために使用される.linspace(a,b,c)関数は、aからbの間にc個の配列要素を生成するために使用される
2.3、配列操作
算術演算子はマトリクスに直接適用することができ、その結果、各要素に演算を適用し、例えばマトリクスA*Bは各要素に対応して乗算され、マトリクスの乗算には@記号が使用される
numpyには、sum、最大値max、最小値minなどの配列全体に適用される関数があります.これらのパラメータで軸を指定した場合は、指定した軸に適用されます.
配列に適用される特定の要素、例えばsin、cos、exp、開方sqrtなどを求める関数もあります.これらの関数は通関数(ufunc)と呼ばれます.
numpyの配列はpythonのlistと同様にインデックス、スライス、反復操作を行うことができます.配列a[x]はアクセス配列aの下にxと表記された要素を表し、1次元配列a[x:y]はアクセス配列xからyの要素を表し、xを省略すると最初から始まり、yは最後まで省略される.a[x:y:a]は、xからyまでa要素ごとに値をとることを表し、aが負数であれば逆順序で値をとることを表す.
多次元配列の場合、インデックス間はカンマで区切られます.使用可能...いくつかの次元を省略することを表し、省略するとその次元のすべての出力とみなされ、例えば
forループ反復によって配列が多く、その内容は低次元のサブ配列であり、各サブ要素を巡回する場合はflat属性を使用することができます.
インデックスとして特定の数値を使用するほか、numpy配列をインデックスとして使用することもできます.例えば配列iを1次元配列aのインデックスとして用いてa[i]を出力する.配列iが多次元配列である場合、aから選択された要素はi配列の対応する位置に埋め込まれる
aが多次元配列である場合、インデックス配列の単一要素は、選択された配列aの最初の次元を表す
多次元配列を複数の次元でインデックスすると、複数のインデックス配列i,jが入力され、カンマで区切られる
2.4、次元の変更
配列のreshape()メソッドは、元の配列をターゲット次元の配列に再構成することができ、例えば1つの2×6の配列は3に再構成されています×4の配列、
配列は再構築時に元の配列を変更するのではなく、変更後の結果配列を返します.
配列は、再構築および印刷時に右端の次元から左に進み、例えば次の3×4の配列bは、まず行ごとに4つ並べてから改行し、このような3行を並べます.多次元の場合は、このような行列で出力を続けます.配列次元が-1の場合、12要素を含む配列などの次元のサイズが自動的に計算されます.2番目、3番目は3です.×2,1次元は2
ravel()関数は、配列を1次元配列に伸ばすことができます.
numpyのhstack()関数は水平方向に複数の配列をマージでき、vstack()関数は垂直方向に複数の配列をマージできる
逆にhsplit()、vsplit()は、指定された数の配列に分割することができる
2.5、配列の複製
配列オブジェクトが新しい変数に値を割り当てると、ストレージスペースが新しく開かれますか?それとも参照が渡されるだけですか?答えは引用です.
例えば、実行文b=aは、1つの参照をbに伝えるだけであり、bに対して実行される操作はaに直接影響する.a,bの2つのオブジェクトのノードidを表示するのも同様です
スライスで配列のビューを返すと、ビューの形状を変更しても元の配列には影響しませんが、ビューでデータの元の配列を変更しても変化します.del aを実行した後も、cがaを参照しているため、aはメモリから削除されません.
copy()メソッドによりデータのコピーを生成できるため、コピーの操作は元の配列に全く影響しません.
Pythonに関する詳細について興味のある読者は、「Python数学演算テクニックまとめ」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python入門と進級経典チュートリアル」、「Pythonファイルとディレクトリ操作テクニックまとめ」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.
1、紹介
Numpyは、形状操作、ソート、選択、入出力、離散フーリエ変換、基本線形代数、基本統計演算、ランダムシミュレーションなど、配列を迅速に操作できる一般的なPython科学技術ライブラリです.多くのPythonライブラリや科学計算のパッケージでは、操作対象としてNumpy配列を使用したり、転送されたPython配列をNumpy配列に変換したりするため、Pythonでは操作データがNumpyから離れられません.
Numpyのコアはndarrayオブジェクトであり、Pythonのn次元配列でカプセル化されているが、C言語で関連する配列操作をプリコンパイルすることで、元のPythonよりも実行効率が高いが、Python言語で符号化され、簡潔なコードと効率的な実行速度を同時に持つ.ndarryと配列にはいくつかの違いがあります.numpy配列の要素は同じタイプで、Python配列オブジェクトが動的に成長できるのとは異なり、作成時に固定されたサイズが決定されます.
2、配列オブジェクト
2.1、属性
Numpyオブジェクトの形式は同構造の多次元配列であり、配列の次元は軸(axis)と呼ばれ、各次元の要素の個数は軸の長さと呼ばれます.例えば次は2×3の2次元配列arrは、第1軸長が3、第2軸長が2
arr = [[ 1., 0., 0.],
[ 0., 1., 2.]]
arr配列オブジェクトでよく使用されるプロパティは次のとおりです.
#
arr.ndim
# , 2×3 shape (2, 3)
arr.shape
#
arr.size
#
arr.dtype
#
arr.itemsize
2.2、配列の作成
通常のpython配列をarray()メソッドでラップしてnumpy配列に変換し、dtype=所定の要素のデータ型を通過することができます.配列は、2 Dなどの高次元配列であってもよいし、メタグループの形式であってもよい.
既知のサイズの配列を塗りつぶす必要がある場合は、関数zeros()を使用して要素を0に塗りつぶすか、ones()を1に塗りつぶすか、empty()をランダム数に塗りつぶすことができます.
arange(a,b,c)関数は、aからbまでc長毎に配列要素を生成するために使用される.linspace(a,b,c)関数は、aからbの間にc個の配列要素を生成するために使用される
# numpy
a1 = np.array([2, 3, 4], dtype=float)
print(a1)
# numpy
a2 = np.array([(1, 2, 3), (3, 4, 5)])
print(a2)
# 3×3 1
a3 = np.ones((3, 3))
print(a3)
# 1 10, 2
a4 = np.arange(1, 10, 2)
print(a4)
# 1 12 4
a5 = np.linspace(1, 12, 4, dtype=int)
print(a5)
'''
numpy :
[2. 3. 4.]
:
[[1 2 3]
[3 4 5]]
1 :
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
1 10 2 :
[1 3 5 7 9]
1 12 4 :
[ 1 4 8 12]
'''
2.3、配列操作
算術演算子はマトリクスに直接適用することができ、その結果、各要素に演算を適用し、例えばマトリクスA*Bは各要素に対応して乗算され、マトリクスの乗算には@記号が使用される
A = np.array([[1, 1],
[0, 1]])
B = np.array([[2, 0],
[3, 4]])
print(A * B)
print(A @ B)
'''
:
[[2 0]
[0 4]]
:
[[5 4]
[3 4]]
'''
numpyには、sum、最大値max、最小値minなどの配列全体に適用される関数があります.これらのパラメータで軸を指定した場合は、指定した軸に適用されます.
配列に適用される特定の要素、例えばsin、cos、exp、開方sqrtなどを求める関数もあります.これらの関数は通関数(ufunc)と呼ばれます.
a = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]])
print(a.max()) # , 11
print(a.sum(axis=0)) # , :[12 15 18 21]
print(np.sqrt(a)) #
numpyの配列はpythonのlistと同様にインデックス、スライス、反復操作を行うことができます.配列a[x]はアクセス配列aの下にxと表記された要素を表し、1次元配列a[x:y]はアクセス配列xからyの要素を表し、xを省略すると最初から始まり、yは最後まで省略される.a[x:y:a]は、xからyまでa要素ごとに値をとることを表し、aが負数であれば逆順序で値をとることを表す.
a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(a[1:3]) # 1 3 :[1 2]
print(a[::-2]) # :[9 7 5 3 1]
多次元配列の場合、インデックス間はカンマで区切られます.使用可能...いくつかの次元を省略することを表し、省略するとその次元のすべての出力とみなされ、例えば
x[...,3]
はx[:,:,:,:,3]
に等しい.forループ反復によって配列が多く、その内容は低次元のサブ配列であり、各サブ要素を巡回する場合はflat属性を使用することができます.
a = np.array([[0, 1, 2, 3],
[10, 11, 12, 13],
[40, 41, 42, 43]])
# a ( ) , ( ) 1~3
print(a[1:3, 0:3])
# , 2
print(a[2, ...])
#
for row in a:
print(row)
#
for item in a.flat:
print(item)
'''
1~3 :
[[10 11 12]
[40 41 42]]
:
[40 41 42 43]
:
[0 1 2 3]
[10 11 12 13]
[40 41 42 43]
:
0
1
2
......
41
42
43
'''
インデックスとして特定の数値を使用するほか、numpy配列をインデックスとして使用することもできます.例えば配列iを1次元配列aのインデックスとして用いてa[i]を出力する.配列iが多次元配列である場合、aから選択された要素はi配列の対応する位置に埋め込まれる
a = np.arange(12) ** 2
print(a)
i = np.array([1, 3, 5])
print(a[i])
# j
j = np.array([[3, 4], [9, 7]])
print(a[j])
'''
[ 0 1 4 9 16 25 36 49 64 81 100 121]
a 1、3、5
[ 1 9 25]
j a
[[ 9 16]
[81 49]]
'''
aが多次元配列である場合、インデックス配列の単一要素は、選択された配列aの最初の次元を表す
多次元配列を複数の次元でインデックスすると、複数のインデックス配列i,jが入力され、カンマで区切られる
a = np.array(([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]]))
#
i = np.array([0, 1])
print(a[i])
# , i,j a [0,2]、[1,3]
j = np.array([2, 3])
print(a[i, j])
'''
a 0、1 :
[[0 1 2 3]
[4 5 6 7]]
a [0,2]、[1,3] :
[2 7]
'''
2.4、次元の変更
配列のreshape()メソッドは、元の配列をターゲット次元の配列に再構成することができ、例えば1つの2×6の配列は3に再構成されています×4の配列、
配列は再構築時に元の配列を変更するのではなく、変更後の結果配列を返します.
配列は、再構築および印刷時に右端の次元から左に進み、例えば次の3×4の配列bは、まず行ごとに4つ並べてから改行し、このような3行を並べます.多次元の場合は、このような行列で出力を続けます.配列次元が-1の場合、12要素を含む配列などの次元のサイズが自動的に計算されます.2番目、3番目は3です.×2,1次元は2
ravel()関数は、配列を1次元配列に伸ばすことができます.
a=np.array([[1,2,3,4,5,6],
[7,8,9,10,11,12]])
b=a.reshape(3,4)
print(b)
# ,
print(a.reshape(-1,3,2))
#
flatted = b.ravel()
print(flatted, end=' ')
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
2×3×2 :
[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]
:
[ 1 2 3 4 5 6 7 8 9 10 11 12]
'''
numpyのhstack()関数は水平方向に複数の配列をマージでき、vstack()関数は垂直方向に複数の配列をマージできる
逆にhsplit()、vsplit()は、指定された数の配列に分割することができる
a=np.array([1,2,3])
b=np.array([4,5,6])
#
c=np.vstack((a,b))
print(c)
#
print(np.hstack((a,b)))
#
print(np.hsplit(c,3))
'''
[[1 2 3]
[4 5 6]]
[1 2 3 4 5 6]
1×2 :
[array([[1],
[4]]),
array([[2],
[5]]),
array([[3],
[6]])]
'''
2.5、配列の複製
配列オブジェクトが新しい変数に値を割り当てると、ストレージスペースが新しく開かれますか?それとも参照が渡されるだけですか?答えは引用です.
例えば、実行文b=aは、1つの参照をbに伝えるだけであり、bに対して実行される操作はaに直接影響する.a,bの2つのオブジェクトのノードidを表示するのも同様です
a = np.array([1, 2, 3])
b = a
# b
b[0] = 0
print(a)
# a、b id
print(id(a), id(b))
'''
b,a
[0 2 3]
id
2290013812656 2290013812656
'''
スライスで配列のビューを返すと、ビューの形状を変更しても元の配列には影響しませんが、ビューでデータの元の配列を変更しても変化します.del aを実行した後も、cがaを参照しているため、aはメモリから削除されません.
c = a[:]
#
c.shape = 3, 1
print(c, a)
# c
c[0] = 1
print(a[0])
'''
c ,a
[[0]
[2]
[3]] [0 2 3]
c ,a :
1
copy()メソッドによりデータのコピーを生成できるため、コピーの操作は元の配列に全く影響しません.
d= a.copy()
d[0]=5
# d,a , a:[1 2 3]
print(a)
Pythonに関する詳細について興味のある読者は、「Python数学演算テクニックまとめ」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python入門と進級経典チュートリアル」、「Pythonファイルとディレクトリ操作テクニックまとめ」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.