1.numpy 數據類型
bool:布爾類型,1 個字節,值為 True 或 False。
int:整數類型,通常為 int64 或 int32 。
intc:與 C 里的 int 相同,通常為 int32 或 int64。
intp:用于索引,通常為 int32 或 int64。
int8:字節(從 -arange128 到 127)
int16:整數(從 -32768 到 32767)
int32:整數(從 -2147483648 到 2147483647)
int64:整數(從 -9223372036854775808 到 9223372036854775807)
uint8:無符號整數(從 0 到 255)
uint16:無符號整數(從 0 到 65535)
uint32:無符號整數(從 0 到 4294967295)
uint64:無符號整數(從 0 到 18446744073709551615)
float:float64 的簡寫。
float16:半精度浮點,5 位指數,10 位尾數
float32:單精度浮點,8 位指數,23 位尾數
float64:雙精度浮點,11 位指數,52 位尾數
complex:complex128 的簡寫。
complex64:復數,由兩個 32 位浮點表示。
complex128:復數,由兩個 64 位浮點表示。
可以在創建arrray時,使用dtype 來指定它的數據類型, 對array 對象使用dtype 查看數據類型
2. ndarry(N維數組對象)?
創建
使用array() 函數, 可以使用dtype 來指定類型
zeros() 函數來生成, 元素均為0 的數組
ones() 函數生成元素都為0 的數組
arange(start, stop,step,dtype) 函數來創建
n>>> np.arange(0,12).reshape(3,4)
array([[ 0,? 1,? 2,? 3],
[ 4,? 5,? 6,? 7],
[ 8,? 9, 10, 11]])
linspace(start, end, num) num: 生成的樣本數,也就是指定由開頭到結尾所指定的范圍分成幾個部分
>>> np.linspace(0,12,3)
array([? 0.,? 6.,? 12.])
也可以使用random.random(shape) 來用隨機數填充數組
>>> np.random.random((3,4))
array([[ 0.42793958,? 0.7801106 ,? 0.40430299,? 0.2440989 ],
[ 0.12988871,? 0.01634131,? 0.62752135,? 0.99287802],
[ 0.95552834,? 0.60075408,? 0.48059998,? 0.6966276 ]])
ndarry 數組的屬性
ndim 秩的數量
size 數組的大小
shape 數組的型
3.基本操作
重新設置形狀
>>> np.arange(0,12).reshape((3,4))
array([[ 0,? 1,? 2,? 3],
[ 4,? 5,? 6,? 7],
[ 8,? 9, 10, 11]])
算術運算
直接使用算術運算符進行運算
矩陣積: dot(A,B) 或A.dot(B), 矩陣不遵循交換律
通用函數: sqrt(), log() , sin(), ...
聚合函數
min()
max()
sum()
mean() 平均數
std()
索引
跟列表有些類似
>>> a=np.arange(20).reshape(4,5)
>>> a
array([[ 0,? 1,? 2,? 3,? 4],
[ 5,? 6,? 7,? 8,? 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
>>> a[[3,4],[3,4]]
實際獲取的是[1,3],也就是第2行和第4列對于的值8。以及[2, 4],也就是第3行和第5列對于的值14。
三維數組
>>>importnumpyasnp>>>a = np.arange(30).reshape(2,5,3)>>>a
array([[[0,1,2],
[3,4,5],
[6,7,8],
[9,10,11],
[12,13,14]],
[[15,16,17],
[18,19,20],
[21,22,23],
[24,25,26],
[27,28,29]]])# 索引>>>a[[0,1],[1,2],[1,2]]
array([4,23])
這里,[0,1]分布代表axis = 0和axis = 1。而,后面的[1,2],[1,2]分別選擇了第2行第2列和第3行第3列的兩個數。
切片
對于多維數組,我們只需要用逗號,分割不同維度即可:
>>>a = np.arange(20).reshape(4,5)>>>a
array([[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14],
[15,16,17,18,19]])# 先取第 3,4 列(第一個維度),再取第 1,2,3 行(第二個維度)。>>>a[0:3,2:4]
array([[2,3],
[7,8],
[12,13]])# 按步長為 2 取所有列和所有行的數據。>>>a[:,::2]
array([[0,2,4],
[5,7,9],
[10,12,14],
[15,17,19]])
數組迭代
遍歷矩陣的每個元素
for item in A:
? ? ? print item?
apply_along_axis() 函數, axis =0, 時,為沿行,=1時,沿列
>>> np.apply_along_axis(np.mean, axis=0, arr=A)
array([ 0.31892036,? 0.32059507,? 0.5275357 ,? 0.56294685])
>>> np.apply_along_axis(np.mean, axis=1, arr=A)
array([ 0.34725639,? 0.52172109,? 0.428521? ])
>>> A
array([[ 0.37854916,? 0.07013463,? 0.16762009,? 0.77272168],
[ 0.39064676,? 0.79229944,? 0.57201198,? 0.33192621],
[ 0.18756517,? 0.09935115,? 0.84297504,? 0.58419266]])
條件和布爾數組
>>> A = np.random.random((4,4))
>>> A
array([[ 0.73033594,? 0.95318457,? 0.05115813,? 0.1413278 ],
[ 0.38830897,? 0.67513952,? 0.73892551,? 0.00472255],
[ 0.52383481,? 0.35105734,? 0.61480131,? 0.00726216],
[ 0.28354593,? 0.15196966,? 0.86462789,? 0.86654137]])
>>> A<0.5
array([[False, False,? True,? True],
[ True, False, False,? True],
[False,? True, False,? True],
[ True,? True, False, False]], dtype=bool)
>>> A[A<0.5]
array([ 0.05115813,? 0.1413278 ,? 0.38830897,? 0.00472255,? 0.35105734,
0.00726216,? 0.28354593,? 0.15196966])
形狀變換
reshape() 函數
ravel () 函數將二維數組變成一維數組
transpose() 交換行列
數組操作
vstack() 垂直入棧操作
hstack() 水平入棧操作
數組切分
hsplit() 水平分割
vsplit() 垂直分割
>>> A = np.arange(0,12).reshape(3,4)
>>> A
array([[ 0,? 1,? 2,? 3],
[ 4,? 5,? 6,? 7],
[ 8,? 9, 10, 11]])
>>> [b,c]= np.hsplit(A,2)
>>> b
array([[0, 1],
[4, 5],
[8, 9]])
>>> c
array([[ 2,? 3],
[ 6,? 7],
[10, 11]])
也可以指定axis 沿哪條軸分割
對象的副本
直接使用copy() 函數
>>> a
array([[ 0.93582073,? 0.36285637,? 0.1743055 ,? 0.73572584],
[ 0.57430482,? 0.86607796,? 0.73776101,? 0.12266299],
[ 0.59001065,? 0.38222194,? 0.06113438,? 0.01316895]])
>>> b=a.copy()
>>> b
array([[ 0.93582073,? 0.36285637,? 0.1743055 ,? 0.73572584],
[ 0.57430482,? 0.86607796,? 0.73776101,? 0.12266299],
[ 0.59001065,? 0.38222194,? 0.06113438,? 0.01316895]])
結構化數組
創建一個簡單的結構化數組
>>> structured = np.array([(1,'first', 0.5, 1+2j), (2, 'second', 1.5, 2+2j)], dtype=('int16,a6,float32, complex64'))>>> structuredarray([(1, 'first',? 0.5,? 1.+2.j), (2, 'second',? 1.5,? 2.+2.j)],? ? ? dtype=[('f0', '>> structured[1]
(2, 'second',? 1.5,? 2.+2.j)
數據文件讀入
保存
>>> a
array([[ 0.93582073,? 0.36285637,? 0.1743055 ,? 0.73572584],
[ 0.57430482,? 0.86607796,? 0.73776101,? 0.12266299],
[ 0.59001065,? 0.38222194,? 0.06113438,? 0.01316895]])
>>> np.save('a_data',a)
np.load('a_data.npy‘)
讀取文件中列表形式
CSV
np.getfromtxt('data.csv', delimiter=',', names=True) , (打開的文件名, 分隔符, 是否保存列標題) ,內容為空的項填充為nan 值