pythonデータ分析実戦---Numpy科学計算ツール
7497 ワード
Numpyの基本認識
NumPy(Numerical Python)はPython言語の拡張ライブラリであり、大量の次元配列とマトリクス演算をサポートし、また配列演算に対して大量の数学関数ライブラリを提供する.
NumPyは非常に高速な数学ライブラリであり、主に配列計算に使用され、以下を含む.強力なN次元配列オブジェクトndarray 放送機能関数 C/C++/Fortranコードを統合するツール 線形代数、フーリエ変換、乱数生成等の機能
Numpyベースデータ構造
NumPy配列の次元数をランク(rank)と呼び,1次元配列のランクを1,2次元配列のランクを2とする.
NumPyでは、各線形配列は軸(axis)、すなわち次元(dimensions)と呼ばれます.たとえば、2次元配列は2つの1次元配列に相当し、最初の1次元配列の各要素は1次元配列であるため、1次元配列はNumPyの軸です.(axis)、最初の軸は最下位の配列に相当し、2番目の軸は最下位の配列の配列である.軸の数であるランクは、配列の次元数である.
axisを宣言できることが多い.axis=0は、0番目の軸に沿って操作する、すなわち、各列を操作することを示す.axis=1は、第1軸に沿って動作する、すなわち、各行に対して動作することを示す.
NumPyの配列で重要なndarrayオブジェクトの属性は次のとおりです.
ツールバーの
説明
ndarray.ndim
ランク、すなわち軸の数または次元の数
ndarray.shape
配列の次元、マトリクス、n行m列
ndarray.size
配列要素の総個数は、.shapeのn*mの値
ndarray.dtype
ndarrayオブジェクトの要素タイプ
ndarray.itemsize
ndarrayオブジェクトの各要素のサイズ(バイト単位)
ndarray.flags
ndarrayオブジェクトのメモリ情報
ndarray.real
ndarray要素の実部
ndarray.imag
ndarray要素の虚部
ndarray.data
実際の配列要素を含むバッファは、一般的に配列のインデックスによって要素が取得されるため、この属性を使用する必要はありません.
配列の作成
Array()関数括弧内はlist,メタグループ,配列,ジェネレータなどであってもよい
arange()関数はrange()と同様に、所与の間隔内で均一な間隔の値を返します.
Numpy汎用関数
反転配列numpy.T
配列形状numpyを変更する.reshape
指定形態の新しい配列numpyを返す.resize
配列のコピーcopy()
配列の文字変換
接続配列
分割配列
配列の計算
Numpyインデックスとスライス
基本インデックスおよびスライス
ブール型のインデックスとスライス
Numpy乱数
Nmupyデータ入出力
関連リンク: NumPy公式サイトhttp://www.numpy.org/ NumPyソースコードhttps://github.com/numpy/numpy Numpyチュートリアルhttps://www.runoob.com/numpy/numpy-tutorial.html
転載先:https://www.cnblogs.com/garrett0220/p/11495597.html
NumPy(Numerical Python)はPython言語の拡張ライブラリであり、大量の次元配列とマトリクス演算をサポートし、また配列演算に対して大量の数学関数ライブラリを提供する.
NumPyは非常に高速な数学ライブラリであり、主に配列計算に使用され、以下を含む.
Numpyベースデータ構造
NumPy配列の次元数をランク(rank)と呼び,1次元配列のランクを1,2次元配列のランクを2とする.
NumPyでは、各線形配列は軸(axis)、すなわち次元(dimensions)と呼ばれます.たとえば、2次元配列は2つの1次元配列に相当し、最初の1次元配列の各要素は1次元配列であるため、1次元配列はNumPyの軸です.(axis)、最初の軸は最下位の配列に相当し、2番目の軸は最下位の配列の配列である.軸の数であるランクは、配列の次元数である.
axisを宣言できることが多い.axis=0は、0番目の軸に沿って操作する、すなわち、各列を操作することを示す.axis=1は、第1軸に沿って動作する、すなわち、各行に対して動作することを示す.
NumPyの配列で重要なndarrayオブジェクトの属性は次のとおりです.
ツールバーの
説明
ndarray.ndim
ランク、すなわち軸の数または次元の数
ndarray.shape
配列の次元、マトリクス、n行m列
ndarray.size
配列要素の総個数は、.shapeのn*mの値
ndarray.dtype
ndarrayオブジェクトの要素タイプ
ndarray.itemsize
ndarrayオブジェクトの各要素のサイズ(バイト単位)
ndarray.flags
ndarrayオブジェクトのメモリ情報
ndarray.real
ndarray要素の実部
ndarray.imag
ndarray要素の虚部
ndarray.data
実際の配列要素を含むバッファは、一般的に配列のインデックスによって要素が取得されるため、この属性を使用する必要はありません.
import numpy
ar = numpy.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]])
print(ar)
print(ar.ndim)
print(ar.shape)
print(ar.size)
print(ar.itemsize)
print(ar.data)
print(ar.dtype)
print(ar.flags)
print(ar.real)
print(ar.imag)
:
[[1 2 3 4 5]
[2 3 4 5 6]
[3 4 5 6 7]]
2
(3, 5)
15
4
int32
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
[[1 2 3 4 5]
[2 3 4 5 6]
[3 4 5 6 7]]
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
配列の作成
Array()関数括弧内はlist,メタグループ,配列,ジェネレータなどであってもよい
ar = np.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]])
ar1 = np.array(range(10))
ar2 = np.array(10)
ar3 = np.array([[1,2,3,4,5],[2,3,4,5,6],['a','b','c','d']])
print(ar)
print(ar1)
print(ar2)
print(ar3)
:
[[1 2 3 4 5]
[2 3 4 5 6]
[3 4 5 6 7]]
[0 1 2 3 4 5 6 7 8 9]
10
[list([1, 2, 3, 4, 5]) list([2, 3, 4, 5, 6]) list(['a', 'b', 'c', 'd'])]
arange()関数はrange()と同様に、所与の間隔内で均一な間隔の値を返します.
print(np.arange(10))
print(np.arange(10.0))
print(np.arange(5,12))
print(np.arange(5.0,12.3))
:
[0 1 2 3 4 5 6 7 8 9]
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
[ 5 6 7 8 9 10 11]
[ 5. 6. 7. 8. 9. 10. 11. 12.]
print(numpy.linspace(5,14,num=10)) # 【 , 】 num
print(numpy.linspace(5,14,num=11))
print(numpy.zeros((4,4),dtype=numpy.int)) # , 0
ar = numpy.array([range(10),range(10,20)])
print(numpy.zeros_like(ar))
print(ar)
print(numpy.ones((2,3),dtype=numpy.int)) # , 1
#ones_like() zeros_like()
print(numpy.eye(3,dtype=numpy.int)) # N+N , 1, 0
:
[ 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.]
[ 5. 5.9 6.8 7.7 8.6 9.5 10.4 11.3 12.2 13.1 14. ]
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]]
[[1 1 1]
[1 1 1]]
[[1 0 0]
[0 1 0]
[0 0 1]]
Numpy汎用関数
反転配列numpy.T
配列形状numpyを変更する.reshape
指定形態の新しい配列numpyを返す.resize
import numpy as np
ar = np.arange(10)
ar1 = np.zeros((2,4))
print(ar)
print(ar1)
print(ar.T)
print(ar1.T)
ar2 = np.arange(12)
ar3 = np.arange(12).reshape(3,4)
print(ar2)
print(ar3)
print(np.resize(ar3,(4,4)))
:
[0 1 2 3 4 5 6 7 8 9]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[0 1 2 3 4 5 6 7 8 9]
[[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[ 0 1 2 3]]
配列のコピーcopy()
ar = np.arange(10)
print(ar)
ar1 = ar
ar1[2]=100
print(ar,ar1)
ar3 = ar.copy()
ar3[3]=998
print(ar,ar3)
:
[0 1 2 3 4 5 6 7 8 9]
[ 0 1 100 3 4 5 6 7 8 9] [ 0 1 100 3 4 5 6 7 8 9]
[ 0 1 100 3 4 5 6 7 8 9] [ 0 1 100 998 4 5 6 7 8 9]
配列の文字変換
ar2 = numpy.array(range(16)).reshape(4,4)
ar3 = ar2.astype(numpy.str)
print(ar3)
:
[['0' '1' '2' '3']
['4' '5' '6' '7']
['8' '9' '10' '11']
['12' '13' '14' '15']]
接続配列
ar = np.array([[1,2,3],[4,5,6]])
ar1 = np.array([[7,8,9],[10,11,12]])
ar2 = np.stack((ar,ar1),0) #
ar3 = np.hstack((ar,ar1))#
ar4 = np.vstack((ar,ar1))#
print(ar2,ar3,ar4)
:
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
分割配列
ar = np.arange(16).reshape(4,4)
ar1 = np.vsplit(ar,2) #
ar2 = np.hsplit(ar,2) #
print(ar)
print(ar1)
print(ar2)
:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
配列の計算
ar2 = numpy.array(range(16)).reshape(4,4)
ar3 = ar2.astype(numpy.str)
print(ar3)
ar4 = ar2*10+100
print(ar4)
print(ar4.mean()) #
print(ar4.sum()) #
:
[['0' '1' '2' '3']
['4' '5' '6' '7']
['8' '9' '10' '11']
['12' '13' '14' '15']]
[[100 110 120 130]
[140 150 160 170]
[180 190 200 210]
[220 230 240 250]]
175.0
2800
Numpyインデックスとスライス
基本インデックスおよびスライス
import numpy as np
# list
ar = np.arange(20)
# print(ar[2])
# print(ar[3:5])
# print(ar[::2])
#
ar1 = ar.reshape(4,5)
# print(ar1)
print(ar1[2][2])
print(ar1[2:4][0][2])
print(ar1[:2])
:
12
12
[[0 1 2 3 4]
[5 6 7 8 9]]
ブール型のインデックスとスライス
ar = np.arange(12).reshape(3,4)
print(ar)
i = np.array([True,False,True])
j = np.array([True,False,True,False])
print(i)
print(j)
print(ar[i,:]) # , True
print(ar[:,j]) # , True
print(ar[ar>5]) #
:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[ True False True]
[ True False True False]
[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 0 2]
[ 4 6]
[ 8 10]]
[ 6 7 8 9 10 11]
Numpy乱数
print(np.random.normal(size=(4,4))) #
print(np.random.rand(4)) # 【0-1】 N ---
print(np.random.rand(2,4))
print(np.random.randn(4)) # 【0-1】 N ---
print(np.random.randn(2,4))
print(np.random.randint(5)) # N
print(np.random.randint(10,50,size=(4,4)))
Nmupyデータ入出力
ar = numpy.random.randint(0,100,size=(10,10))
numpy.savetxt("savetxt.txt",ar,delimiter=",",fmt="%i") #
txt_load = numpy.loadtxt("savetxt.txt",delimiter=',') #
print(txt_load)
# print(ar)
関連リンク:
転載先:https://www.cnblogs.com/garrett0220/p/11495597.html